fopen sous Unix

fopen sous Unix - C++ - Programmation

Marsh Posté le 06-11-2002 à 15:55:44    

J'ai un petit problème.
 
Je veux ouvrir un fichier se trouvant dans le répertoire contenant mon binaire. Donc je fais un simple fopen("MON_FICHIER", "rb" ); mais le truc c'est que ça marche seulement si, lorsque je lance le binaire, je me trouve dans son répertoire:
Si je fais /PATH/DE/MON_BIN/bin, ça marche pas, je suis obligé de faire cd /PATH/DE/MON_BIN puis ./bin .
 
Donc comment faire pour toujours lui faire ouvrir le bon fichier quelquesoit le répertoire dans lequel je me trouve?? Ou alors comment obtenir le chemin de mon binaire???

Reply

Marsh Posté le 06-11-2002 à 15:55:44   

Reply

Marsh Posté le 06-11-2002 à 16:02:38    

Plus exactement, il faut que le répertoire du fichier à lire soit le répertoire courant (peu importe où se trouve l'exécutable).
 
A ma connaissance, sous Unix, c'est assez délicat de récupérer le répertoire de l'exécutable. Il faut analyser la variable d'environnement $PATH (getenv("PATH" ), fonction définie dans stdlib.h ; attention cette fonction peut renvoyer NULL) et parcourir chacun des répertoires que cette variable d'environnement contient pour y trouver l'exécutable décrit dans argv[0] (quand le main a pour prototype int void(int argc, char* argv[])).


Message édité par BifaceMcLeOD le 06-11-2002 à 16:03:12
Reply

Marsh Posté le 06-11-2002 à 16:14:30    

:ouch: Ya pas plus simple?? C'est un peu une méthode barbare quand même :)
Enfin, c'est pas grave, si je trouve pas mieux, j'utiliserais le chemein complet, mais je vais perdre la portabilité vers Windows...
Ou alors, j'utiliserais une fonction intermédiaire pour accéder à mes fichiers à la fois sous Linux et sous Windows.
 
Merci beaucoup ;)

Reply

Marsh Posté le 06-11-2002 à 16:16:20    

_Momone_ a écrit a écrit :

:ouch: Ya pas plus simple?? C'est un peu une méthode barbare quand même :)
Enfin, c'est pas grave, si je trouve pas mieux, j'utiliserais le chemein complet, mais je vais perdre la portabilité vers Windows...
Ou alors, j'utiliserais une fonction intermédiaire pour accéder à mes fichiers à la fois sous Linux et sous Windows.
 
Merci beaucoup ;)




Et vive les "ifdef"

Reply

Marsh Posté le 06-11-2002 à 16:50:01    

Non, ça marche aussi sous Windows, cette méthode. Mais sous Windows, il y a plus simple : argv[0] contient toujours le chemin complet de l'exécutable... :D
 
Comme dit nicolasm, vive les #ifdef. ;)

Reply

Marsh Posté le 06-11-2002 à 17:39:11    

Ouaip, jcrois que je vais utilisais les #ifdef.
 
Merci à tous :hello:

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed