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 :

petit problème d'utilisation de PathFiExists


Sujet :

Langage C++

  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2011
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2011
    Messages : 45
    Par défaut petit problème d'utilisation de PathFiExists
    bonjour à tous.

    depuis hier, j'essai d'utiliser la fonction PathFiExists dans un progrtamme en C++, mais sans succès. La fonction me retourne toujours false. Je pense que ça doit être un petit truc, mais j'arrive pas à voir quoi. voici petit bout de code:

    Code : Séctionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    char* dossier="C:\\Program Fis";
    	if (PathFiExists(LPCWSTR(dossier))==true){
    		cout<<"existe"<<endl;}
    	else {cout<<"existe pas"<<endl;}
    la compilation se passe nickel, mais résultat ne col pas.
    J'avais trouvé ça sur internet, mais je ne pense pas pas être dans ce cas:

    This function returns FALSE if a mounted remote drive is out of service.

  2. #2
    Membre chevronné

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    426
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 426
    Par défaut
    Salut,
    Je crois qu'il faut entrer un chemin de fichier ( "C:\\Program Fis\\MonFichier.txt" par exemp ) et non chemin d'un répertoire comme tu l'as fait dans l'extrait de code que tu donnes.
    On peut voir dans l'exemp donné ici

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2011
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2011
    Messages : 45
    Par défaut
    ça ne fait aucune différence, je viens de faire test avec ça:

    Code : Séctionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    char* dossier="C:\\Program Fis\\Avira\\AntiVir Desktop\\about.htm";
    	if (PathFiExists(LPCWSTR(dossier))==true){
    		cout<<" fichier existe"<<endl;}
    	else {cout<<" fichier n'existe pas"<<endl;}
    je suis sur que ce fichier existe, mais il me met que ça n'existe pas.

    Puis sur la page de la fonction (officiel de microsoft) il y a marqué ça:

    Determines whether a path to a fi system object such as a fi or directory is valid
    j'ai ai déduit que ça marchait pour s fichiers ou s dossiers

  4. #4
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    Il faut peut-être voir ce qu'indique GetLastError ?

  5. #5
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2011
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2011
    Messages : 45
    Par défaut
    qu'est ce ?

    [edit]oublie ma question, je suis en train de chercher[/edit]

  6. #6
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2011
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2011
    Messages : 45
    Par défaut
    j'ai ajouté ça comme ligne de code à la fin du programme pour avoir résultat de GetLastError

    Code : Séctionner tout - Visualiser dans une fenêtre à part
    cout<<GetLastError<<endl;
    et résultat:

    7680F196

    et ça, même goog ne sait pas ce que ça veut dire

  7. #7
    Membre éprouvé
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juillet 2009
    Messages
    122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant Chercheur

    Informations forums :
    Inscription : Juillet 2009
    Messages : 122
    Par défaut
    Par hasard, est-ce que fait que s répertoires que tu utilises aient des espaces dans urs noms ne serait pas la source du problème?

    Peux-tu tester sur un répertoire n'ayant pas d'espace dans son nom?

  8. #8
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2011
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2011
    Messages : 45
    Par défaut
    Code : Séctionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    char *dossier="C:\\Intel\\Logs";
    	if (PathFiExists(LPCWSTR(dossier))==true){
    		cout<<" fichier existe"<<endl;}
    	else {cout<<" fichier n'existe pas"<<endl;}
    	 cout<<GetLastError<<endl;
    même réponse, alors que dossier existe. j'ai fais un test avec un fichier égament, et même résultat).

    et toujours la même erreur pour GetLastError (s'il s'agit d'une erreur)

  9. #9
    Invité
    Invité(e)
    Par défaut
    Pardon, je me suis mal exprimé... GetLastError() renvoie l'identifiant de l'erreur, mais il faut passer par FormatMessage() pour obtenir un message explicit... Voir ici

  10. #10
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2011
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2011
    Messages : 45
    Par défaut
    merci pour ces précisions. mais pour être honnête, je n'ai pas compris fonctionnement de cette fonction. C'est une fonction disponib directement ? il faut la reécrire ?

  11. #11
    Invité
    Invité(e)
    Par défaut
    GetLastError() et FormatMessage() sont des fonctions fournies par microsoft. L'exemp montre juste comment s utiliser et permet d'afficher message d'erreur dans une boite de dialogue. En ce qui te concerne tu peux réduire code à ceci :

    Code : Séctionner 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
     
    const char *dossier="C:\\Intel\\Logs";
    if (PathFiExists(LPCWSTR(dossier))==true)
    {
    	cout<<" fichier existe"<<endl;
    }
    else 
    {
    	cout<<" fichier n'existe pas"<<endl;
     
    	LPVOID lpMsgBuf;   /// zone de mémoire utilisée pour stocker  message d'erreur
     
    	DWORD dw = GetLastError(); /// récupère l'identifiant de l'erreur
     
        FormatMessage(  /// fonction qui rend intelligib  message
            FORMAT_MESSAGE_ALLOCATE_BUFFER |  /// indique que la fonction doit allouer el même l'espace nécessaire
            FORMAT_MESSAGE_FROM_SYSTEM |      /// inqique que c'est message système
            FORMAT_MESSAGE_IGNORE_INSERTS,
            NULL,                      /// paramètre inuti dans ce cas
            dw,                        /// identifiant de l'erreur
            MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), /// langue
            (LPTSTR) &lpMsgBuf,  /// zone où  message sera stocké
            0, NULL );  /// paramètres inutis dans ce cas
     
    	wcout << "Erreur : " << (LPCTSTR) lpMsgBuf << endl; /// nécessite <wostream>
     
    	LocalFree(lpMsgBuf); /// libère la mémoire alloué dans la fonction FormatMessage()
    }

  12. #12
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2011
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2011
    Messages : 45
    Par défaut
    j'ai copié/collé ton code, aucune erreur: chapeau

    sinon, la fonction me retourne :

    Erreur: fichier spùcifiù est introuvab
    j'ai ai déduit que ça voulait dire que fichier était introuvab XD

  13. #13
    Invité
    Invité(e)
    Par défaut
    Je viens de remarquer qu'il indiqué, tout en bas de la page de msdn sur PathFiExists (cel-ci) que la fonction peut échouer si l'antivirus kapersky est activée. Ce n'est pas ton cas ?

  14. #14
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par défaut
    Salut,
    Si au lieu de faire des casts pour supprimer s warning ( ici LPCWSTR(dossier)) on cherche à s comprendre, ça éviterait s erreurs ensuite :
    Code : Séctionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
        std::wstring dossier=L"C:\\Program Fis";
    	if (PathFiExists(dossier.c_str())==true){
    		std::cout<<"existe"<<endl;}
    	else {std::cout<<"existe pas"<<endl;}
    ou :
    Code : Séctionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
        WCHAR dossier=L"C:\\Program Fis";
    	if (PathFiExists(dossier.c_str())==true){
    		std::cout<<"existe"<<endl;}
    	else {std::cout<<"existe pas"<<endl;}

  15. #15
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2011
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2011
    Messages : 45
    Par défaut
    Citation Envoyé par Joe Dralliam Voir  message
    Je viens de remarquer qu'il indiqué, tout en bas de la page de msdn sur PathFiExists (cel-ci) que la fonction peut échouer si l'antivirus kapersky est activée. Ce n'est pas ton cas ?
    non, j'ai AviraAntivir.

    sinon 3DArchi, je viens de tester ton code, il marche !!!

    Merci beaucoup !!!

    Par contre, est ce qu'il serait possib d'avoir quelques explication sur ton code ? Je ne comprends pas pourquoi il faut déclarer la variab dossier en wstring, et pourquoi on met un L devant chemin.

    en tout cas, merci à tous !!

  16. #16
    Invité
    Invité(e)
    Par défaut
    La déclaration d'une chaine préfixée par L permet d'indiquer au compilateur que c'est un chaine de caractères larges ( wide characters en anglais, ce qui donne type wchar_t pour s stocker), c'est à dire faisant plus de 8 bits et pouvant donc contenir des caractères spéciaux. Un chaine du genre L"xxx" est donc du type wchar_t const* et standard fournit, pour toutes s classes manipulant des caractères une variante (en fait un typedef) pour s caractères larges : wstring, wstringstream, wfstream, wcout, wclog, wcerr...

  17. #17
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2011
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2011
    Messages : 45
    Par défaut
    ok. pour être honnête, je ne suis pas sur d'avoir tout saisi, mais je crois que j'ai capté l'essentiel.

    en tout cas merci beaucoup, tu a résolu mon problème

  18. #18
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par défaut
    Citation Envoyé par poutch Voir  message
    ok. pour être honnête, je ne suis pas sur d'avoir tout saisi,
    Une seu chose à retenir : s cast sont à bannir : PathFiExists(LPCWSTR(dossier)) !!! Si compilo te sort un warning ou une erreur, ce n'est pas un hasard.

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

Discussions similaires

  1. Petit problème d'utilisation de ce forum
    Par ovni76 dans le forum Mode d'emploi & aide aux nouveaux
    Réponses: 1
    Dernier message: 26/09/2014, 18h45
  2. [XL-2010] Petit problème dans l'utilisation D'END(Xldown)
    Par kapoo dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 12/03/2013, 14h05
  3. utiliser fseek dans un petit problème
    Par fred_sell dans le forum Débuter
    Réponses: 18
    Dernier message: 29/01/2010, 13h30
  4. Réponses: 5
    Dernier message: 17/11/2009, 20h37
  5. Problème d'utilisation de Mysql avec dev-c++
    Par Watchi dans le forum Dev-C++
    Réponses: 10
    Dernier message: 06/08/2004, 14h35

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