IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

Récuperer le répertoire de l'exécutable


Sujet :

C++

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    72
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 72
    Points : 89
    Points
    89
    Par défaut Récuperer le répertoire de l'exécutable
    Salut à tous!

    Je développe un programme en c++ qui doit fonctionner sous linux et sous cygwin.

    Il utilise d'autres fichiers dont je connais les chemins relatifs.
    Quand j'utilise la commande
    > ./mon_prog
    il n'y a aucun problème...

    Pour l'utiliser depuis n'importe quel endroit, j'ai récupérer le chemin d'appel:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    string::size_type pos=argv[0].find_last_of("/");
    path = argv[0].substr(0, pos + 1);
    Puis j'ai ajouté path avant chaque chemin de fichier, ca marche aussi.

    Mon problème, c'est que si j'ajoute mon programme dans la variable d'environnement $PATH, et que j'appelle, depuis n'importe ou
    > mon_prog
    la variable arg[0] ne contient plus que le nom de l'exécutable...

    Voyez vous un moyen de récupérer le nom du répertoire du programme?

    Merci d'avance.

  2. #2
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 382
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 382
    Points : 41 589
    Points
    41 589
    Par défaut
    Aucun moyen sûr pour les systèmes POSIX.
    Sous Windows, tu as GetModuleFileName().

  3. #3
    Expert confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    3 549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 549
    Points : 4 625
    Points
    4 625
    Par défaut
    La commande 'which' fait ça

  4. #4
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 382
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 382
    Points : 41 589
    Points
    41 589
    Par défaut
    Mais ne sert à rien sans le nom de l'exécutable...

  5. #5
    Rédacteur

    Avatar de Davidbrcz
    Homme Profil pro
    Ing Supaéro - Doctorant ONERA
    Inscrit en
    Juin 2006
    Messages
    2 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ing Supaéro - Doctorant ONERA

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 307
    Points : 4 732
    Points
    4 732
    Par défaut
    Bah 'which arg[0]'

  6. #6
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 382
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 382
    Points : 41 589
    Points
    41 589
    Par défaut
    argv[0] n'est pas garanti contenir le nom de l'exécutable : Il peut être complètement vide.

    Encore que, c'est peut-être garanti par la norme POSIX. Dans ce cas, le coup d'un appel à la commande which pourrait éventuellement marcher...

    Mais pas dans le cas où le programme n'est pas dans le path, et est appelé directement avec son chemin.

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    72
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 72
    Points : 89
    Points
    89
    Par défaut
    oki,

    Tout d'abord j'aimerai garder le même code pour linux et windows (cygwin), et je crois que le getModuleFileName n'existe que sous Windows.

    Pour ce qui est du which, ca peut marcher si l'utilisateur ne modifie pas le nom du programme, et que ce dernier est inscrit en dur dans mon programme, c'est ca?

    Enfin, y'a t'il un moyen de récupérer le chemin qui s'affiche à la console quand je fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     system( "which mon_prog" );
    ??

  8. #8
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 382
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 382
    Points : 41 589
    Points
    41 589
    Par défaut
    Pas avec system(), mais tu devrais pouvoir avec popen().

  9. #9
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    72
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 72
    Points : 89
    Points
    89
    Par défaut
    pour l'instant, dans les tests que j'ai fait, argv[0] contient toujours la commande d'appel du programme :
    1)soit le chemin repertoire/nom_prog
    2)soit juste nom_prog si il est dans le path.

    Il me faudrait donc faire un test : si j'ai un chemin (donc un "/"), je suis dans le cas1, facile...

    Sinon, il faut que je fasse un which argv[0] , que je récupère ce qui s'affiche à la console, et c'est bon...

    Merci pour votre aide.

  10. #10
    Expert confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    3 549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 549
    Points : 4 625
    Points
    4 625
    Par défaut
    Sinon tu peux parcourir $PATH toi-même

  11. #11
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    72
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 72
    Points : 89
    Points
    89
    Par défaut
    certes, mais d'après le man, c'est exactement ce que fais which...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Trouver le répertoire de l'exécutable
    Par troumad dans le forum C
    Réponses: 19
    Dernier message: 03/04/2011, 21h31
  2. Obtenir le répertoire de l'exécutable
    Par melleb dans le forum Général Dotnet
    Réponses: 9
    Dernier message: 24/06/2008, 17h28
  3. Comment récuperer le chemin d'un exécutable ?
    Par bigey3 dans le forum Langage
    Réponses: 13
    Dernier message: 01/01/2008, 19h14
  4. Réponses: 6
    Dernier message: 19/07/2007, 16h22
  5. Récuperer le source d'un exécutable
    Par inegliz dans le forum Delphi
    Réponses: 2
    Dernier message: 13/02/2007, 12h48

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo