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

Langage C++ Discussion :

Changer de répertoire courant avec SetCurrentDirectory()


Sujet :

Langage C++

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    96
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 96
    Points : 44
    Points
    44
    Par défaut Changer de répertoire courant avec SetCurrentDirectory()
    Bonjour,

    Pour les besoins d'un application, je dois changer le répertoire courant pour afficher la liste des fichiers contenus dans un dossier spécifique.
    Voici comment j'ai procédé :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SetCurrentDirectory((LPCWSTR)"monchemin"));
    J'ai été obligé de faire un cast de ma constante pour que mon projet se compile correctement. J'ai séparé chacun de ces répertoires du chemin par "\\". La valeur retournée par SetCurrentDirectory() est égale à 0 donc la le chemin indiqué en paramètre n'est semble t-il pas le bon (ou bien le type ?).
    J'ai regardé dans la FAQ et j'ai trouvé ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    if(::SetCurrentDirectory("c:\\MyProjects\\Dvp") == FALSE)
    {
      // GetLastError()
    }
    Pour quelle raison n'y a t-il pas lieu, dans cet exemple, de forcer le cast du path ?
    Je dois préciser que le chemin est à l'origine bon (copié directement à partir du dossier cible. J'y ai juste rajouté les "\" supplémentaires).
    Je ne vois pas ce qui cloche, quelqu'un a t-il déjà été confronté à ce problème ?

    PS : J'ai oublié de préciser que la taille de mon path est inférieure à 260.

  2. #2
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Points : 50 367
    Points
    50 367
    Par défaut
    A chaque fois que tu écris un cast, demande toi comment tu ferais pour ne pas avoir à l'écrire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SetCurrentDirectory((LPCWSTR)"monchemin"));
    est horrible car tu castes une chaine de de caractères ANSI en UNICODE sans aucune précaution. Probablement qu'au tout début le compilateur hurlait et que tu l'as fais taire avec ce cast mais cela ne suffit pas. Essaye avec :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SetCurrentDirectory(_T("monchemin"));
    , cela devrait mieux aller.

    Le problème de base est que ton projet est un projet UNICODE et donc toutes les chaines de caractères utilisées par l'API WIN32 doivent être des chaines de caractères UNICODE. La macro _T() permet de faire cette transformation de manière élégante.

    Le code que tu as vu sur internet t'a induit en erreur car c'est probablement du code ANSI et donc il ne nécessite pas de transformation en UNICODE.
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    96
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 96
    Points : 44
    Points
    44
    Par défaut
    Citation Envoyé par ram-0000 Voir le message
    A chaque fois que tu écris un cast, demande toi comment tu ferais pour ne pas avoir à l'écrire
    C'est vrai que ce n'est pas une chose que je fais habituellement. Le passage du C# au C++ doit parfois m'empêcher de voir plus loin donc j'y songerai.
    Le résultat de l'utilisation de la macro _T est concluant. Entre temps j'avais finalement réussi à changer de répertoire en passant par une variable CString, mais bof...

  4. #4
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Points : 50 367
    Points
    50 367
    Par défaut
    Citation Envoyé par theawe Voir le message
    Entre temps j'avais finalement réussi à changer de répertoire en passant par une variable CString, mais bof...
    Tu avais réglé le problème mais tu ne saivais pas comment.

    En fait le CString en UNICODE (ton option de compilation) accepte des chaines de caractères ANSI (ce que tu passais) et fait silencieusement la conversion.

    Ensuite quanf tu passait ton CString à la fonction, tu passais silencieusement la chaine de caractères UNICODE.
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .

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

Discussions similaires

  1. DirectoryInfo - Changer le répertoire courant
    Par infostars dans le forum Windows Forms
    Réponses: 4
    Dernier message: 09/02/2009, 14h19
  2. changer de répertoire courant
    Par varfendell dans le forum Débuter avec Java
    Réponses: 9
    Dernier message: 16/07/2008, 14h42
  3. VB6 : changer le répertoire courant
    Par flyjodel dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 10/11/2007, 00h24
  4. [WINDOWS XP] : changer le répertoire courant du DOS
    Par mouche dans le forum Windows XP
    Réponses: 2
    Dernier message: 29/06/2007, 19h16
  5. Changer le répertoire courant
    Par v4np13 dans le forum Entrée/Sortie
    Réponses: 4
    Dernier message: 29/04/2007, 15h43

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