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

  FORUM HardWare.fr
  Programmation
  C++

  Detecter repertoire courant

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Detecter repertoire courant

n°387708
Bleuarff
pouet
Posté le 08-05-2003 à 23:56:19  profilanswer
 

En C pur, est-ce qu'il est possible de récuperer le répertoire depuis lequel est lancée l'application ? Ce qu'il me faudrait, c'est une chaine contenant ce repertoire, afin de pouvoir ouvrir un fichier qui se trouve dans le meme rep.


---------------
©2008 Bleuarff Corp.
mood
Publicité
Posté le 08-05-2003 à 23:56:19  profilanswer
 

n°387739
Taz
bisounours-codeur
Posté le 09-05-2003 à 00:53:57  profilanswer
 

le langage C ne sait pas ce qu'est un répertoire: le C est un langage hautement portable et ne reconnait que tres  peu de notions. Ici, il ne connait pas la notion de répertoire car elle n'existe pas sur toutes les plateformes (pense à ta machine à laver)
 
mais si tu précises ton système, on devrait pouvoir t'aider

n°387744
Bleuarff
pouet
Posté le 09-05-2003 à 01:00:42  profilanswer
 

++Taz a écrit :

le langage C ne sait pas ce qu'est un répertoire: le C est un langage hautement portable et ne reconnait que tres  peu de notions. Ici, il ne connait pas la notion de répertoire car elle n'existe pas sur toutes les plateformes (pense à ta machine à laver)
 
mais si tu précises ton système, on devrait pouvoir t'aider


 
le prog doit tourner sur win xp et nt4 au moins.


---------------
©2008 Bleuarff Corp.
n°387750
Taz
bisounours-codeur
Posté le 09-05-2003 à 01:08:25  profilanswer
 

ben là je laisserais quelqu'un d'autre répondre

n°387785
VisualC++
J'va y penser ...
Posté le 09-05-2003 à 01:42:59  profilanswer
 

Regarde du cote des fonctions
 


_chdir, _wchdir  Change current working directory  
_chdrive  Change current drive  
_getcwd, _wgetcwd  Get current working directory for default drive  
_getdcwd, _wgetdcwd  Get current working directory for specified drive  
_getdrive  Get current (default) drive  
_mkdir, _wmkdir  Make new directory  
_rmdir, _wrmdir  Remove directory  
_searchenv, _wsearchenv  Search for given file on specified paths  

n°387865
Taz
bisounours-codeur
Posté le 09-05-2003 à 07:46:14  profilanswer
 

c'est pas des conneries ça? me dit pas qu'ils ont appelés des fonctions publics _* ??? :pfff:

n°387871
chrisbk
-
Posté le 09-05-2003 à 08:00:10  profilanswer
 

GetCurrentDirectory() me parait assez judicieux

n°388010
VisualC++
J'va y penser ...
Posté le 09-05-2003 à 11:14:27  profilanswer
 

Taz > nan pas de conneries desole.
 
chrisbk > oui j'ai voulu lui dire cela aussi mais pas sur que ce soit pas du pur vc++

n°388014
Taz
bisounours-codeur
Posté le 09-05-2003 à 11:22:01  profilanswer
 

et tu changes toujours pas de pseudo.... je te comprendrais jamais

n°388018
VisualC++
J'va y penser ...
Posté le 09-05-2003 à 11:22:59  profilanswer
 

Euh le pseudo il a 5 ans vais pas changer pour ca ;)

mood
Publicité
Posté le 09-05-2003 à 11:22:59  profilanswer
 

n°388019
chrisbk
-
Posté le 09-05-2003 à 11:23:56  profilanswer
 

VisualC++ a écrit :

Taz > nan pas de conneries desole.
 
chrisbk > oui j'ai voulu lui dire cela aussi mais pas sur que ce soit pas du pur vc++


 
ben quitte a faire
perso j'ai jamais vu/utiliser les fonctions que tu cites....

n°388021
VisualC++
J'va y penser ...
Posté le 09-05-2003 à 11:24:55  profilanswer
 

Enfin suivant avec ce que tu compileras bleuarff, tu met le underscore (compilo vc) ou tu le vires.

n°388033
Taz
bisounours-codeur
Posté le 09-05-2003 à 11:31:46  profilanswer
 

ça par contre c'est une connerie

n°388037
Taz
bisounours-codeur
Posté le 09-05-2003 à 11:32:44  profilanswer
 

ça par contre c'est une connerie

n°388039
gilou
Modérateur
Modzilla
Posté le 09-05-2003 à 11:33:11  profilanswer
 

++Taz a écrit :

c'est pas des conneries ça? me dit pas qu'ils ont appelés des fonctions publics _* ??? :pfff:  

Il y a de nombreuses fonctions similaires qui ont un nom XYZ sous unix, et _XYZ sous windows (ca date de la SDK de win 3.0 ou meme avant).
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
n°388109
Tetragramm​aton IHVH
dieu unique => pensée unique
Posté le 09-05-2003 à 12:32:24  profilanswer
 

++Taz a écrit :

ça par contre c'est une connerie


 

Citation :


ben là je laisserais quelqu'un d'autre répondre


 
Sans commentaire...  :sarcastic:


---------------
"Dieu a exploité tous nos complexes d'infériorité, en commençant par notre incapacité de croire à notre propre divinité." - Emil Michel Cioran
n°388112
Konar
Posté le 09-05-2003 à 12:38:03  profilanswer
 

VisualC++ a écrit :


oui j'ai voulu lui dire cela aussi mais pas sur que ce soit pas du pur vc++


 
ca veut un peu rien dire ca nan ?
 
tu pourrais tres bien utiliser GetCurrentDirectory() dans un code edité sous notepad (pour ne citer que le meilleur editeur) et compilé avec le intel C++ compiler ou gcc (ah nan pas gcc).

n°388122
konar_spre​me
Posté le 09-05-2003 à 12:43:56  profilanswer
 

gilou a écrit :

Il y a de nombreuses fonctions similaires qui ont un nom XYZ sous unix, et _XYZ sous windows (ca date de la SDK de win 3.0 ou meme avant).
A+,  


 
Toutes les fonctions de la lib CRT, implémentation Microsoft, ont les 2 noms de définis : avec _* et sans. D'après eux, c'est uniquement pour compatibilité.
Tiré du header direct.h

Code :
  1. /* Non-ANSI names for compatibility */
  2. _CRTIMP int __cdecl chdir(const char *);
  3. _CRTIMP char * __cdecl getcwd(char *, int);
  4. _CRTIMP int __cdecl mkdir(const char *);
  5. _CRTIMP int __cdecl rmdir(const char *);


 
Le problème c'est que c'est pas vérifiable qui a raison : les fonctions chdir, mkdir et autres *dir* ne font pas parti du standard C ISO 9899

n°388137
Bleuarff
pouet
Posté le 09-05-2003 à 13:12:28  profilanswer
 

chrisbk a écrit :

GetCurrentDirectory() me parait assez judicieux


 
j'ai vu ça dans la msdn en effet, mais pour ce que j'ai pu essayer g pas encore réussi à m'en servir...jverrais ça plus en detail ce soir.
 
Sinon je suis sous vc mais je tiens à faire du c et pas du cpp.

n°388146
konar_spre​me
Posté le 09-05-2003 à 13:22:50  profilanswer
 

bleuarff a écrit :


Sinon je suis sous vc mais je tiens à faire du c et pas du cpp.


 
Toutes les fonctions de l'API win32 sont en C. Ca marche très bien dans un programme en C donc.
 
exemple

Code :
  1. TCHAR szDir[MAX_PATH + 1];
  2. DWORD dw = GetCurrentDirectory(MAX_PATH, szDir);
  3. if (dw == 0)
  4. {
  5. dw = GetLastError();
  6. // Handle error
  7. }
  8. // Hop! szDir vaut le current path, et c du C.


n°388580
gilou
Modérateur
Modzilla
Posté le 09-05-2003 à 18:35:48  profilanswer
 

konar_spreme a écrit :


 
Toutes les fonctions de la lib CRT, implémentation Microsoft, ont les 2 noms de définis : avec _* et sans. D'après eux, c'est uniquement pour compatibilité.
Tiré du header direct.h

Code :
  1. /* Non-ANSI names for compatibility */
  2. _CRTIMP int __cdecl chdir(const char *);
  3. _CRTIMP char * __cdecl getcwd(char *, int);
  4. _CRTIMP int __cdecl mkdir(const char *);
  5. _CRTIMP int __cdecl rmdir(const char *);


 
Le problème c'est que c'est pas vérifiable qui a raison : les fonctions chdir, mkdir et autres *dir* ne font pas parti du standard C ISO 9899

Elles sont sans doute dans POSIX.
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
n°388925
Bleuarff
pouet
Posté le 10-05-2003 à 02:45:18  profilanswer
 

konar_spreme a écrit :


 
Toutes les fonctions de l'API win32 sont en C. Ca marche très bien dans un programme en C donc.
 
exemple

Code :
  1. TCHAR szDir[MAX_PATH + 1];
  2. DWORD dw = GetCurrentDirectory(MAX_PATH, szDir);
  3. if (dw == 0)
  4. {
  5. dw = GetLastError();
  6. // Handle error
  7. }
  8. // Hop! szDir vaut le current path, et c du C.


 


 
C nickel ! merci :jap:


---------------
©2008 Bleuarff Corp.
n°391164
Bleuarff
pouet
Posté le 13-05-2003 à 00:13:41  profilanswer
 

Je suis en train de me frapper la tete contre les murs !
Le pb de récuperer le rep courant c'etait pour ouvrir un fichier se trouvant dans le meme rep que l'exe. Je viens seulement maintenant de me rendre compte que fopen fait ça par défaut :cry: Je me sens très con tout d'un coup :o


---------------
©2008 Bleuarff Corp.
n°391167
jagstang
Pa Capona ಠ_ಠ
Posté le 13-05-2003 à 00:18:50  profilanswer
 

lol... Au moins tu auras appris quelque chose !
 
L'important c'est de pas mourrir idiot, non ?

n°391175
Bleuarff
pouet
Posté le 13-05-2003 à 00:27:08  profilanswer
 

Clair que j'aurais appris. C'est surtout que j'ai passé qq heures à faire un truc propre dans le vent. c'est vraiment débile, j'étais tellement persuadé que ça pouvait pas être aussi simple que j'ai meme pas fait un test :/


---------------
©2008 Bleuarff Corp.
n°391211
matlu
Posté le 13-05-2003 à 01:02:11  profilanswer
 

bleuarff a écrit :

Je suis en train de me frapper la tete contre les murs !
Le pb de récuperer le rep courant c'etait pour ouvrir un fichier se trouvant dans le meme rep que l'exe. Je viens seulement maintenant de me rendre compte que fopen fait ça par défaut :cry: Je me sens très con tout d'un coup :o  


 
tiens, c marrant, c exactement ce ke j'allais te dire...
comme koi, parfois c utile de rien connaitre en prog : ça simplifie la vision des choses !!

n°391234
gatorette
Posté le 13-05-2003 à 01:31:31  profilanswer
 

J'attire quand même ton attention sur le fait que le répertoire courant n'est pas forcemment celui où est l'executable. En effet, il peut être modifié de plusieurs façons (lors de l'ouverture de la boîte de dialogue "Ouvrir"/"Enregistrer sous", avec l'appel de la fonction SetCurrentDirectory ou encore dans le raccourci permettant de lancer le programme).
Donc si tu souhaites ouvrir un fichier dans le même répertoire que ton executable, il vaut mieux utiliser GetModuleFileName qui te donne le chemin vers ton fichier executable. Puis ensuite utiliser PathRemoveFileSpec (ou une fonction perso) pour obtenir uniquement le répertoire.
 
Utiliser le répertoire où se situe le programme peut être pratique, mais il faut se méfier car même si l'utilisateur peut lire dans ce répertoire, il ne peut pas forcemment écrire dedans. Dans de nombreux cas, Windows définit des répertoires privilégiés pour stocker la plupart des fichiers accompagnants un programme (voir la liste des CIDLs).


---------------
each day I don't die is cheating
n°391862
Bleuarff
pouet
Posté le 13-05-2003 à 13:39:33  profilanswer
 

gatorette a écrit :

J'attire quand même ton attention sur le fait que le répertoire courant n'est pas forcemment celui où est l'executable. En effet, il peut être modifié de plusieurs façons (lors de l'ouverture de la boîte de dialogue "Ouvrir"/"Enregistrer sous", avec l'appel de la fonction SetCurrentDirectory ou encore dans le raccourci permettant de lancer le programme).
Donc si tu souhaites ouvrir un fichier dans le même répertoire que ton executable, il vaut mieux utiliser GetModuleFileName qui te donne le chemin vers ton fichier executable. Puis ensuite utiliser PathRemoveFileSpec (ou une fonction perso) pour obtenir uniquement le répertoire.
 
Utiliser le répertoire où se situe le programme peut être pratique, mais il faut se méfier car même si l'utilisateur peut lire dans ce répertoire, il ne peut pas forcemment écrire dedans. Dans de nombreux cas, Windows définit des répertoires privilégiés pour stocker la plupart des fichiers accompagnants un programme (voir la liste des CIDLs).


 
On va dire que mon prog ne change jamais le rep courant, et que celui-ci, que ce soit chez moi ou les ordis des salles info de l'ecole, a toujours un acces en ecriture. Mais merci des précisions :jap:


---------------
©2008 Bleuarff Corp.
mood
Publicité
Posté le   profilanswer
 


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

  Detecter repertoire courant

 

Sujets relatifs
Tester des fichiers dans un répertoireCreation d'un repertoire et CHMOD
upload dans un mauvais repertoireDetecter acrobat reader en javascript
[Algo] Détecter l'orientation d'une image (et étapes intermédiaires)Télécharger un répertoire à l'aide d'un composant InetControl
recupererle repertoire courantSélection d'un répertoire (BrowseForFolder)
supprimer un repertoire en java 
Plus de sujets relatifs à : Detecter repertoire courant


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