Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2376 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  [C] enregistrement dans un repertoire non defini d'avance possible?

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[C] enregistrement dans un repertoire non defini d'avance possible?

n°223907
albino13
Against TCPA // Palladium
Posté le 05-10-2002 à 12:47:03  profilanswer
 

Bonjour,
je fais un pgm qui utilise les fichiers et j'aimerais, apres saisis de ceci, les enregistrer soit sur une DK, soit de le repertoire courant(bon ca je sais faire :)) soit dans un repertoire que l'utilisateur donneras... c'est possible? et si oui comment faire?
peut on egalement faire saisir par l'utilisateur l'adresse ou devra s'enregistrer le fichier et si le ou les repertoires n'existes pas les creer?
 
apres coment on peut faire pour appeler un fihier qui ne se trouve pas dans le repertoire courant?
 
Ca fais beaucoup de questions...  :sweat:  :sweat:  :sweat:  
 
merci de votre aide  ;)

mood
Publicité
Posté le 05-10-2002 à 12:47:03  profilanswer
 

n°223910
Taz@PPC
saloperie de i=`expr $i + 1`;
Posté le 05-10-2002 à 12:51:41  profilanswer
 

fais attention: la notion de répertoire n'existe pas en C. suivant ta plateforme tu devras faire des appels systemes pour créer et/ou parcourir des répertoires


---------------
du bon usage de rand [C] / [C++]
n°223913
albino13
Against TCPA // Palladium
Posté le 05-10-2002 à 13:00:28  profilanswer
 

Taz@PPC a écrit a écrit :

fais attention: la notion de répertoire n'existe pas en C. suivant ta plateforme tu devras faire des appels systemes pour créer et/ou parcourir des répertoires




merci de me le dire je ne le savais pas...
tu pourrais etre plus precis ou alors m'indiquer un lien ou je pourrais avoir c renseignements? merci beaucoup

n°223956
Taz@PPC
saloperie de i=`expr $i + 1`;
Posté le 05-10-2002 à 15:56:56  profilanswer
 

quelle plateforme? ca dépend de ton système


---------------
du bon usage de rand [C] / [C++]
n°223972
albino13
Against TCPA // Palladium
Posté le 05-10-2002 à 18:37:01  profilanswer
 

Taz@PPC a écrit a écrit :

quelle plateforme? ca dépend de ton système




windows (xp si ca change qqchose...)

n°223984
Taz@PPC
saloperie de i=`expr $i + 1`;
Posté le 05-10-2002 à 19:04:42  profilanswer
 

ben chai pas alors...


---------------
du bon usage de rand [C] / [C++]
n°224049
HelloWorld
Salut tout le monde!
Posté le 05-10-2002 à 23:56:46  profilanswer
 

Comme te l'as dit Taz, il va falloir faire appel a des fonctions propres a Windows.
Ca releve plus de la programmation Windows que du C.
Une solution elegante pour tout regler d'un coup est d'ouvrir une boite "Enregistrer sous ..." qui va permettre a l'utilisateur soit de :
- choisir la disquette
- garder le repertoire courant
- aller dans le repertoire voulu  
- creer son propre repertoire
 
Toi tu t'occupes juste de lancer la boite de dialogue et de récupérer le chemin valide qu'elle va te retourner (en fonction de ce qu'a choisi l'utilisateur)
 
La boite de dialogue enregistrer sous (Save As) fait partie des "commons dialog" (y'en a d'autres telle que Ouvrir, Imprimer, ...)
 

Code :
  1. int EnregistrerSous(char * Name, int Size)
  2. {
  3. /*
  4.    Renvoit TRUE si un nom de fichier a été donné (click sur OK)
  5.    FALSE si l'utilisateur a annulé ou s'il il y a eu une erreur
  6.    Name contient le nom complet valide (avec le chenmin)
  7. */
  8.     OPENFILENAME ofn;
  9.     ZeroMemory(&ofn, sizeof(ofn)); // tout initialiser a zero
  10.     ofn.lStructSize = sizeof(OPENFILENAME);
  11.     ofn.lpstrFile = Name;
  12.     ofn.nMaxFile = Size;
  13.     ofn.Flags = OFN_PATHMUSTEXIST |  // chemin valide
  14.                 OFN_OVERWRITEPROMPT; // demander avant de remplacer un fichier existant
  15.     return GetSaveFileName(&ofn);
  16. }
  17. #define MAX_SIZE 200
  18. int main()
  19. {
  20.     char path[MAX_SIZE] = "nom par defaut.txt";
  21.     if (EnregistrerSous(path, MAX_SIZE) != 0)
  22.     {
  23.         // path contient le nom + chemin complet du fichier a creer
  24.     }
  25.     return 0;
  26. }


 

Citation :

apres coment on peut faire pour appeler un fihier qui ne se trouve pas dans le repertoire courant?


 
Ben en donnant son nom complet ...
Tu es dans C:\Repertoire1
Tu veux ouvrir le fichier fic1 dans C:\repertoire2
=> tu fais fopen("C:\\Repertoire2\\fic1", "rb" );


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
n°224051
HelloWorld
Salut tout le monde!
Posté le 06-10-2002 à 00:00:26  profilanswer
 

J'oubliais ... un petit
#include <windows.h>
pour que ca marche.
Pour connaitre tous les styles possibles de la boite :
http://msdn.microsoft.com/library/ [...] LENAME.asp


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
n°224291
albino13
Against TCPA // Palladium
Posté le 06-10-2002 à 21:13:42  profilanswer
 

HelloWorld a écrit a écrit :

J'oubliais ... un petit
#include <windows.h>
pour que ca marche.
Pour connaitre tous les styles possibles de la boite :
http://msdn.microsoft.com/library/ [...] LENAME.asp



merci beaucoup j'essairais ca tres bientot

n°224309
veryfree
Posté le 06-10-2002 à 22:52:51  profilanswer
 

HelloWorld a écrit a écrit :

Comme te l'as dit Taz, il va falloir faire appel a des fonctions propres a Windows.
Ca releve plus de la programmation Windows que du C.
Une solution elegante pour tout regler d'un coup est d'ouvrir une boite "Enregistrer sous ..." qui va permettre a l'utilisateur soit de :
- choisir la disquette
- garder le repertoire courant
- aller dans le repertoire voulu  
- creer son propre repertoire
 
Toi tu t'occupes juste de lancer la boite de dialogue et de récupérer le chemin valide qu'elle va te retourner (en fonction de ce qu'a choisi l'utilisateur)
 
La boite de dialogue enregistrer sous (Save As) fait partie des "commons dialog" (y'en a d'autres telle que Ouvrir, Imprimer, ...)
 

Code :
  1. int EnregistrerSous(char * Name, int Size)
  2. {
  3. /*
  4.    Renvoit TRUE si un nom de fichier a été donné (click sur OK)
  5.    FALSE si l'utilisateur a annulé ou s'il il y a eu une erreur
  6.    Name contient le nom complet valide (avec le chenmin)
  7. */
  8.     OPENFILENAME ofn;
  9.     ZeroMemory(&ofn, sizeof(ofn)); // tout initialiser a zero
  10.     ofn.lStructSize = sizeof(OPENFILENAME);
  11.     ofn.lpstrFile = Name;
  12.     ofn.nMaxFile = Size;
  13.     ofn.Flags = OFN_PATHMUSTEXIST |  // chemin valide
  14.                 OFN_OVERWRITEPROMPT; // demander avant de remplacer un fichier existant
  15.     return GetSaveFileName(&ofn);
  16. }
  17. #define MAX_SIZE 200
  18. int main()
  19. {
  20.     char path[MAX_SIZE] = "nom par defaut.txt";
  21.     if (EnregistrerSous(path, MAX_SIZE) != 0)
  22.     {
  23.         // path contient le nom + chemin complet du fichier a creer
  24.     }
  25.     return 0;
  26. }


 

Citation :

apres coment on peut faire pour appeler un fihier qui ne se trouve pas dans le repertoire courant?


 
Ben en donnant son nom complet ...
Tu es dans C:\Repertoire1
Tu veux ouvrir le fichier fic1 dans C:\repertoire2
=> tu fais fopen("C:\\Repertoire2\\fic1", "rb" );
 




 
salut,
je n ai rien a voir avec ce topic mais j ai essayé de compilé ton source avec devc++ et y a 0 erreur 0 warning
mais aucun executable n est généré c normale?
 

mood
Publicité
Posté le 06-10-2002 à 22:52:51  profilanswer
 

n°224537
HelloWorld
Salut tout le monde!
Posté le 07-10-2002 à 15:55:33  profilanswer
 

Heu non c'est pas normal, car je l'ai moi aussi teste avant de le mettre et je l'ai teste avec ... devcpp.
Moi j'ai la version 4.
J'ai recement eu ce probleme d'exe non genere, c'etait hier quand j'ai fait generer le code asm de mon prog en ajoutant l'option -S dans les parametres supplementaires.
J'ai vire cet ajout et tout est rentre dans l'ordre.
Tant que j'y suis : il marche bien toi devcpp ?
Moi j'ai installe le 5 beta et il refuse de compiler.
Quant au 4, il plante regulierement au bout d'un certains nombre de sauvegardes de mon source (a chaque sauvegarde, la memoire utilisee par devcpp augmente !).


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
n°224541
veryfree
Posté le 07-10-2002 à 16:02:06  profilanswer
 

HelloWorld a écrit a écrit :

Heu non c'est pas normal, car je l'ai moi aussi teste avant de le mettre et je l'ai teste avec ... devcpp.
Moi j'ai la version 4.
J'ai recement eu ce probleme d'exe non genere, c'etait hier quand j'ai fait generer le code asm de mon prog en ajoutant l'option -S dans les parametres supplementaires.
J'ai vire cet ajout et tout est rentre dans l'ordre.
Tant que j'y suis : il marche bien toi devcpp ?
Moi j'ai installe le 5 beta et il refuse de compiler.
Quant au 4, il plante regulierement au bout d'un certains nombre de sauvegardes de mon source (a chaque sauvegarde, la memoire utilisee par devcpp augmente !).




 
salut,
 alors pour repondre a tes questions:
 
j ai devc++ 4 jl ai instalé la semaine derniere et sous windows 2000 ca tourne normalement, jpeux rien dire de + puisque c 'est avec ton programme que je l ai utilisé pour la premiere fois  :D  
 
sinon je pense que ce serait bien de faire part aux programmeurs du projet les problemes que tu as rencontrés...  
 
 
sinon pour finir je trouve pas l option que tu m'as demandé d enlever :/
 
edit : j ai ce message qui apparait mais jle comprend pas :
C:\DOCUME~1\ADMINI~1.LOC\LOCALS~1\Temp\cci4aaaa.o(.text+0x3b):file.c: undefined reference to `GetSaveFileNameA@4'
 


Message édité par veryfree le 07-10-2002 à 16:07:17
n°225565
HelloWorld
Salut tout le monde!
Posté le 09-10-2002 à 13:01:32  profilanswer
 

Ah ok ok je vois ...
Effectivement j'ai eu cette erreur, c'est parce qu'il faut ajouter une lib (celle qui contient la fonction GetSaveFileNameA, d'ou l'erreur car il est incapable de trouver ou c'est defini)
Cette fonction est il me semble contenue dans comdlg32.dll
donc faut inclure une lib qui doit vraissemblablement avoir comme nom comdlg32.lib


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
n°225903
veryfree
Posté le 09-10-2002 à 21:46:20  profilanswer
 

HelloWorld a écrit a écrit :

Ah ok ok je vois ...
Effectivement j'ai eu cette erreur, c'est parce qu'il faut ajouter une lib (celle qui contient la fonction GetSaveFileNameA, d'ou l'erreur car il est incapable de trouver ou c'est defini)
Cette fonction est il me semble contenue dans comdlg32.dll
donc faut inclure une lib qui doit vraissemblablement avoir comme nom comdlg32.lib




 
j ai reussi a trouver comdlg32.dll par contre comdlg32.lib :/
 
j ai pris comdlg32.dll jl ai mise ds winnt/system32 et ca na rien changer  
jdoit mal m y prendre :/

n°225984
Musaran
Cerveaulté
Posté le 10-10-2002 à 01:16:12  profilanswer
 

Je voulais juste indiquer un truc:

Code :
  1. GetSaveFileName()  //nom utilisé dans le source
  2. GetSaveFileNameA() //fonction appelée pour un environnement ANSI/ASCII
  3. GetSaveFileNameW() //fonction appelée pour un environnement Unicode (W comme Wide char)


GetSaveFileName est en fait une macro se tournant vers l'une ou l'autre version selon le contexte de compilation.
Des macros supplémentaires se chargent de convertir les chaînes passées en argument au besoin.
 
Windows 95, 98, 98SE sont ANSI natifs.
Windows NT, 2000, XP sont Unicode natifs.
 
Donc, l'environnement pour lequel on compile pourrait affecter la fonction recherchée.
Si il n'y a pas la bonne librairie derrière, ça ne marchera pas.


---------------
Bricocheap: Montage de ventilo sur paté de mastic silicone
n°226140
HelloWorld
Salut tout le monde!
Posté le 10-10-2002 à 13:11:02  profilanswer
 

La dll ca n'a rien a voir.
Tu ne dois pas y toucher (a ton system32) car cette dll existe deja et de toute facon le probleme n'est pas la.
Le probleme c'est que ton programme doit appeler une fonction qui se trouve dedans (GetSaveFileNameA) et que le compilateur est incapable de savoir comment faire pour appeler cette fonction, c.a.d qu'il ne sait pas dans quelle dll elle se trouve.
Cette info est contenue dans un .lib, je ne sais pas lequel (j'ai pas devccp sous la main la).
Tu peux faire une recherche "*.lib contenant texte GetSaveFileNameA" et tu devrait avoir le nom de la lib.
Tu la rajoutes a ton projet.
Si tu ne la trouve pas (bizarre tout de meme), il va falloir faire a la main ce que le compilo est incapable de faire automatiquement pour toi, c'est a dire charger la dll (LoadLibrary) et recuperer un pointeur sur la fonction GetSaveFileNameA (GetProcAddress).


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
n°226158
veryfree
Posté le 10-10-2002 à 13:48:30  profilanswer
 

HelloWorld a écrit a écrit :

La dll ca n'a rien a voir.
Tu ne dois pas y toucher (a ton system32) car cette dll existe deja et de toute facon le probleme n'est pas la.
Le probleme c'est que ton programme doit appeler une fonction qui se trouve dedans (GetSaveFileNameA) et que le compilateur est incapable de savoir comment faire pour appeler cette fonction, c.a.d qu'il ne sait pas dans quelle dll elle se trouve.
Cette info est contenue dans un .lib, je ne sais pas lequel (j'ai pas devccp sous la main la).
Tu peux faire une recherche "*.lib contenant texte GetSaveFileNameA" et tu devrait avoir le nom de la lib.
Tu la rajoutes a ton projet.
Si tu ne la trouve pas (bizarre tout de meme), il va falloir faire a la main ce que le compilo est incapable de faire automatiquement pour toi, c'est a dire charger la dll (LoadLibrary) et recuperer un pointeur sur la fonction GetSaveFileNameA (GetProcAddress).




 
merci pour toute ces explications c plus claitr pour moi maintenant!
 
en fait je debute en c/c++  
 
jregarde tout ca des que je peux
 
 
 :hello:

n°226359
HelloWorld
Salut tout le monde!
Posté le 10-10-2002 à 19:45:18  profilanswer
 

la lib c'est libcomdlg32.a (gcc utilise .a comme extension et pas .lib) et elle se trouve dans le repertoire lib de ton install de devcpp
Pour l'ajouter a ton projet, dans le menu project option, ajoute la dans "further object files" (localise la a partir du bouton ouvrir a cote)
good luck !


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  [C] enregistrement dans un repertoire non defini d'avance possible?

 

Sujets relatifs
[VBA] Possible de recuperer du telnet sous Excel en temps reel ?[JAVASCRIPT] envoyer un mail en javascript, c possible ???
[Access] Lancer une macro à une heure défini ?[PHP] grrrr c pas possible !
est-il possible de faire un bouton sur 2 lignes avec CSS2 ?[PHP] rediriger mon ip vers une page définie ? C'est possible en php ?
Un long timer de plus de 60 000 c possible ?CGI qui refuse d'acceder a un fichier situe hors du repertoire cgi-bin
upload multiple de fichiers ou de repertoireMethode pour l'enregistrement et recherche de donnée dans une DB ??
Plus de sujets relatifs à : [C] enregistrement dans un repertoire non defini d'avance possible?


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR