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 :

Problème avec FindFirstFile et FindNextFile en c++


Sujet :

C++

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2010
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 46
    Points : 33
    Points
    33
    Par défaut Problème avec FindFirstFile et FindNextFile en c++
    Bonjour,

    Je veux lister le contenu d'un répertoire. J'ai voulu essayer le code que j'ai trouvé dans ce tuto http://c.developpez.com/faq/?page=fi...HIERS_dir_list

    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
     
    #include <stdio.h>
    #include <windows.h>
     
    int main(void)
    {
        WIN32_FIND_DATA File;
        HANDLE hSearch;
     
        hSearch = FindFirstFile("*.*", &File);
        if (hSearch != INVALID_HANDLE_VALUE)
        {
            do {
                printf("%s\n", File.cFileName);
            } while (FindNextFile(hSearch, &File));
     
            FindClose(hSearch);
        }
     
        return 0;
    }
    Quand je compile j'obtiens l'erreur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    error C2664: 'FindFirstFileW' : cannot convert parameter 1 from 'const char [4]' to 'LPCWSTR'
    SVP comment la résoudre?

    Je travaille avec VS2008 sous windows XP (application de type win32 Console Application)

    Merci

  2. #2
    Membre expérimenté

    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2011
    Messages
    685
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2011
    Messages : 685
    Points : 1 418
    Points
    1 418
    Par défaut
    Citation Envoyé par emmye Voir le message
    Bonjour,

    Je veux lister le contenu d'un répertoire. J'ai voulu essayer le code que j'ai trouvé dans ce tuto http://c.developpez.com/faq/?page=fi...HIERS_dir_list

    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
     
    #include <stdio.h>
    #include <windows.h>
     
    int main(void)
    {
        WIN32_FIND_DATA File;
        HANDLE hSearch;
     
        hSearch = FindFirstFile("*.*", &File);
        if (hSearch != INVALID_HANDLE_VALUE)
        {
            do {
                printf("%s\n", File.cFileName);
            } while (FindNextFile(hSearch, &File));
     
            FindClose(hSearch);
        }
     
        return 0;
    }
    Quand je compile j'obtiens l'erreur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    error C2664: 'FindFirstFileW' : cannot convert parameter 1 from 'const char [4]' to 'LPCWSTR'
    SVP comment la résoudre?

    Je travaille avec VS2008 sous windows XP (application de type win32 Console Application)

    Merci

    Apparemment
    , cette fonction prend en paramètre un pointeur sur TCHAR (je n'ai pas cherché de quel type il s'agissait exactement), donc tu devrais pouvoir t'en sortir comme ceci :
    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
     
    #include <cstdio> //pour utiliser les librairies C en C++, il faut inclure ctruc au lieu de truc.h
    #include <tchar.h>
    #include <windows.h>
     
    #define FIND_ALL_SIZE 3              //c'est plus propre
    #define FIND_ALL         "*.*"
     
    int main(void)
    {
        WIN32_FIND_DATA File;
        HANDLE hSearch;
        TCHAR filesResearched[FIND_ALL_SIZE] = FIND_ALL;//vaudrait mieux un malloc mais je suis pressé et je ne me souviens plus des arguments de malloc
        //TCHAR* fileName = (TCHAR*)malloc( ? ,sizeof(TCHAR)*3 /*ou une fonction pour récupérer la longueur de ta chaine*/ )
        hSearch = FindFirstFile(filesResearched, &File);
        //etc...
        return 0;
    }
    Dis nous si ça fonctionne ^^

    EDIT : le type LPCWSTR doit vouloir dire : Long Pointer to a Const Wchar STRing
    Nullius in verba

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2010
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 46
    Points : 33
    Points
    33
    Par défaut
    Bonjour Kaamui,

    Merci d'avoir pris le temps de me répondre
    J'ai trouvé la solution:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    ...
        // Prepare string for use with FindFile functions.  First, copy the
       // string to a buffer, then append '\*' to the directory name.
     
       StringCchCopy(szDir, MAX_PATH, argv[1]);
       StringCchCat(szDir, MAX_PATH, TEXT("\\*"));
     
       // Find the first file in the directory.
     
       hFind = FindFirstFile(szDir, &ffd);
    ...
    A tous ceux qui auront besoin de la réponse en complet, voici un bon exemple du MSDN
    http://msdn.microsoft.com/en-us/libr...8VS.85%29.aspx

    Merci encore une fois Kaamui

  4. #4
    Membre expérimenté

    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2011
    Messages
    685
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2011
    Messages : 685
    Points : 1 418
    Points
    1 418
    Par défaut
    Citation Envoyé par emmye Voir le message
    Bonjour Kaamui,

    Merci d'avoir pris le temps de me répondre
    J'ai trouvé la solution:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    ...
        // Prepare string for use with FindFile functions.  First, copy the
       // string to a buffer, then append '\*' to the directory name.
     
       StringCchCopy(szDir, MAX_PATH, argv[1]);
       StringCchCat(szDir, MAX_PATH, TEXT("\\*"));
     
       // Find the first file in the directory.
     
       hFind = FindFirstFile(szDir, &ffd);
    ...
    A tous ceux qui auront besoin de la réponse en complet, voici un bon exemple du MSDN
    http://msdn.microsoft.com/en-us/libr...8VS.85%29.aspx

    Merci encore une fois Kaamui
    tu ne semblais pas vouloir passer par les lignes de commande puisque tu écrivais ta chaine dans ton code... je ne comprends pas trop mais bon... tu es sur de savoir ce qu'est "argv" ?

    et si tu regarde le type de ton szdir, il s'agit d'un TCHAR*...
    Nullius in verba

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 29/08/2003, 17h52
  2. VC++ Direct3D8, problème avec LPD3DXFONT et LPD3DTEXTURE8
    Par Magus (Dave) dans le forum DirectX
    Réponses: 3
    Dernier message: 03/08/2002, 11h10
  3. Problème avec le type 'Corba::Any_out'
    Par Steven dans le forum CORBA
    Réponses: 2
    Dernier message: 14/07/2002, 18h48
  4. Problème avec la mémoire virtuelle
    Par Anonymous dans le forum CORBA
    Réponses: 13
    Dernier message: 16/04/2002, 16h10

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