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

Windows Discussion :

probleme entre current directory et ligne de commande


Sujet :

Windows

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 4
    Points : 2
    Points
    2
    Par défaut probleme entre current directory et ligne de commande
    Salut a tous,

    J'ai un petit problème que je peine à comprendre. Dans mon programme, si je le lance normalement (par un double click), j'obtient comme ligne de commande vide (normal), et un current directory qui donne le chemin ou se trouve le prog (normal aussi). Le programme se trouvant sur le disque D, le chemin commence donc par d:\

    Par contre si je lance le programme en faisant glisser une autre icone de fichier (n'importe laquelle), j'obtiens comme ligne de commande l'adresse de ce fichier (il est en format court, mais sans importance).

    PAR CONTRE, même si cette icone étais sur le disque D, le current directory deviens TOUS LES COUPS c:\

    Je n'arrive pas a comprendre pourquoi si je glisse par exemple l'icone de "d:\text\exxai.txt", ma ligne de ocmmande est bien "d:\text\exxai.txt", mais que le repertoire courant devienne toujours "c:\"

    Ca change non seulement de repertoire, mais carrement de disque. J'hallucine.

    C'est dans mon prog, c'est une fonctionnalité de windows que j'ai pas compris ???
    Alors si vous avez une idée, je vous remercie d'avance !!

    Ci dessous, l'extrait de code qui produit cet effet.

    Merci a tous !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    using namespace std;
    
    #include <windows.h>
    #include <string>
    
    /*  Declaration des fonctions  */
    
    LRESULT CALLBACK WindowProcedure (HWND, UINT, WPARAM, LPARAM);
    
    int Info( string titre, string message );
    
    // 
    //--Simplification de la message Box---------------------------------------------// 
    //
    
    int Info( string titre, string message )
    {
        // cette box affiche les differnts sosu dommaines contenus dans lurl
        MessageBox  // affichage du contenu
        (
            NULL,               // handle de la fenetre parent (aucune ici)
            message.c_str(),    //contenuFichier,          
            titre.c_str(),      // address of title of message box
            MB_OK | MB_ICONINFORMATION  // style of message box (bouton OK + icone I) 
        ); 
    }
    
    
    
    
    /*  Make the class name into a global variable  */
    char szClassName[ ] = "WindowsApp";
    
    int WINAPI WinMain (HINSTANCE hThisInstance,
                        HINSTANCE hPrevInstance,
                        LPSTR lpszArgument,
                        int nFunsterStil)
    
    {
        string lnCommande =  lpszArgument;
                            
        char pBuff[MAX_PATH];
        string curDir;
        
        GetCurrentDirectory( MAX_PATH, pBuff );
        curDir.assign(pBuff);    
    
        lnCommande = ">" + lnCommande + "<";
        
        Info("ligne de Commande",lnCommande);
        
        curDir = ">" + curDir + "<";
    
        Info("Repertoire Courant", curDir);
    
        return 0;
    }

  2. #2
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    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 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Sans doute un quirk de compatibilité avec un programme qui ne marchait que si le répertoire courant était C:\....

    De toute façon, tu ne peux pas faire confiance au répertoire courant dans un contexte autre que l'invite de commandes. Mais tu peux te fier au chemin du fichier (lpszArgument, qui est en fait la ligne de commande sans l'exécutable) et au chemin de l'exe (Que tu peux obtenir avec GetModuleFileName()).
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    Médinoc, qu'est ce que tu veut dire par "quirk de compatibilité" ? Tu parles d'un programme autre que le mien (si on peut appeler mes quelques ligens un programme).

    Sinon, je sais qu'il vaut mieux eviter getcurrentfolder car il est modifié si le programme est appelé d'un raccourci (et qu'on peut aussi par exemple utiliser getcomandline je crois), mais comment faire si on veut que si on lance un programme par un raccourci, on obtienne le chemin de ce raccourci ??
    5et puis surtout, faut l'avouer, ca m'agace de ne pas comprendre d'ou ca vient ce problème )

    Quoi qu'il en soit, merci a tous !

  4. #4
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    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 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Citation Envoyé par WArnaud Voir le message
    Médinoc, qu'est ce que tu veut dire par "quirk de compatibilité" ? Tu parles d'un programme autre que le mien (si on peut appeler mes quelques ligens un programme).
    Oui, je parle d'un ancien programme qui pourrait exister et qui pourrait être la raison pour laquelle un tel comportement est maintenu (cela pouvait être à l'origine un bug de Windows, mais dès qu'un programme se met à en dépendre, cela devient une feature que l'équipe de compatibilité (dont fait partie Raymond Chen) doit s'efforcer de maintenir).

    Sinon, je sais qu'il vaut mieux eviter getcurrentfolder car il est modifié si le programme est appelé d'un raccourci (et qu'on peut aussi par exemple utiliser getcomandline je crois), mais comment faire si on veut que si on lance un programme par un raccourci, on obtienne le chemin de ce raccourci ??
    Je ne crois pas que ce soit possible.

    ...En fait, le répertoire courant ne doit être utilisé que si le chemin de fichier reçu en paramètre n'est pas un chemin absolu. Et quand tu fais glisser un fichier avec l'explorateur, celui-ci envoie forcément un chemin absolu au programme, jamais un chemin relatif.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  5. #5
    Candidat au Club
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    ...En fait, le répertoire courant ne doit être utilisé que si le chemin de fichier reçu en paramètre n'est pas un chemin absolu. Et quand tu fais glisser un fichier avec l'explorateur, celui-ci envoie forcément un chemin absolu au programme, jamais un chemin relatif.
    Médinoc > Donc si j'ai bien compris ce n'est pas au niveau de mon code que ca cloche, ou de quelque chose que j'aurais loupé dans la msdn ? C'est toujours ca de pris ! Merci pour l'explication.


    Pour me méler un peu de ces histoires de désassemblage, je dirais que je suis loin de me sentir paresseux, quand je viens poser une question c'est que j'ai beaucoup cherché et que je sèche vraiment. D'un autre coté, je ne suis pas (plus) un professionnel (pour des raisons indépendantes de ma volonté mais que je ne dirais qu'en privé), et je (re)part d'un niveau de base avec mes dix petits doigts parfois effarouchés par certaines étrangetés du code.

    Alors j'avoue humblement que le désassemblage ne rentre pas encore pour l'instant dans la catégorie de réponses qui peuvent me servir, même si j'apprécie vos réponses a leur juste valeur. Je pense que beaucoup de personnes qui pose une question ne sont pas des pros, et n'ont donc pas les capacités ni le reflexe d'aller chercher la ou irais voir tout vrai professionnel.

  6. #6
    Membre éclairé Avatar de sloshy
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Janvier 2005
    Messages
    728
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Janvier 2005
    Messages : 728
    Points : 723
    Points
    723
    Par défaut
    ça pue le clone à des km
    A savoir, ici tu n'es pas patron, c'est un lieu d'échange et si tu ne veux pas échanger, la porte est là personne ne te retient !
    De plus le reverse n'est pas dans les cordes de tout le monde ...
    “La seule révolution possible, c'est d'essayer de s'améliorer soi-même, en espérant que les autres fassent la même démarche. Le monde ira mieux alors.”

  7. #7
    Candidat au Club
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    Bon finalement je me suis arrangé avec GetModuleFileName et ca me convient.

    Par contre, j'ai eu beau chercher sur Google groups, j'ai bien trouvé comment (la même chose qu'ici ), par contre j'ai pas trouvé "Pourquoi", même en cherchant beaucoup beâucoup plus que 0.32 sceondes (vais me faire virer quoi )

    En tous cas merci a tous !

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

Discussions similaires

  1. [MySQL-5.6] probleme avec les variables en ligne de commande
    Par addes dans le forum Débuter
    Réponses: 0
    Dernier message: 03/09/2013, 16h10
  2. Réponses: 8
    Dernier message: 08/04/2009, 14h30
  3. Probleme execution scipt ligne de commandes
    Par stan314 dans le forum Général Python
    Réponses: 4
    Dernier message: 29/05/2007, 13h23
  4. [NetBeans] probleme de passage a la ligne de commande
    Par trollchichon dans le forum NetBeans
    Réponses: 7
    Dernier message: 01/03/2006, 19h57
  5. Réponses: 3
    Dernier message: 07/04/2003, 20h06

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