Probleme listage fichiers

[Résolu]
Signaler
Messages postés
199
Date d'inscription
vendredi 16 avril 2004
Statut
Membre
Dernière intervention
28 février 2008
-
Messages postés
21041
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
-
Bonjour, je souhaite lister tous les fichiers du disque dur, et j'ai un probleme dans ce code la :

void list_hd(char *szHD)
{
    WIN32_FIND_DATA wfd;
   
    DWORD dwLen, dwLenHD, dwNB = 0;
    BOOL bTemp;
   
    HANDLE hFile = FindFirstFileA(szHD, (LPWIN32_FIND_DATAA)&wfd);
    dwLenHD = strlen(szHD) + 10;

    if(hFile == INVALID_HANDLE_VALUE) {
        fprintf(stderr, "GetLasError! %d\n\n", GetLastError());   
        return;
    }

    do {
   
        if(dwNB <= 2) dwNB++;
        if((wfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) && dwNB > 2 ) {
            dwLen = WideCharToMultiByte(CP_ACP, 0, wfd.cFileName, -1, NULL, 0, NULL, &bTemp);
           
            LPSTR lpDir  = new CHAR[dwLen];
            LPSTR lpPath = new CHAR[dwLen+dwLenHD];
           
            ZeroMemory(lpDir, dwLen);
            ZeroMemory(lpPath, dwLen+dwLenHD);

            WideCharToMultiByte(CP_ACP, 0, wfd.cFileName, -1, lpDir, dwLen, NULL, &bTemp);

            sprintf(lpPath, "%s\b\b\b%s\\*.*", szHD, lpDir);
            fprintf(stdout, "PATH: %s\n", lpPath);

            list_hd(lpPath);

            delete []lpDir;
            delete []lpPath;
        }
       
    } while(FindNextFile(hFile, &wfd));
   
    FindClose(hFile);
}

int main(int argc, char *argv[])
{
    list_hd("C:\");

    return 0;
}

En effet, lorsque je trouve un dossier (& FILE_ATTRIBUTE_DIRECTORY), je reconstruit le path pour ensuite le renvoyer à la même fonction, faire de la récusivirté quoi... mais après avoir appelé cette fonction, la fonction FindFirstFile me renvoie un INVALID_HANDLE_VALUE avec le code erreur 123 (mauvais path), ce que je ne comprends pas...

Si vous pouviez m'indiquer d'ou pourrait provenir l'erreur... merci beaucoup

3 réponses

Messages postés
21041
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
29
pourquoi appeler version ansi pour convertiur ensuite en unicode ?


Cette daube de sprintf() n'a rien à faire dans du code Windows (hors formatage facile d'un flottant).


2 allocs mémoire par tour qui ne seront désallouées qu'à la fin de la récursion complète, c'est suicidaire et surtout inutile (voir mon exemple).

Faut afficher ce que tu obtiens avec sprintf, tu sauras si le prob est justifié.

ciao...
BruNews, MVP VC++
Messages postés
21041
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
29
Regarde ici:
http://www.cppfrance.com/code.aspx?id=16638

ciao...
BruNews, MVP VC++
Messages postés
199
Date d'inscription
vendredi 16 avril 2004
Statut
Membre
Dernière intervention
28 février 2008

oui merci, c'est pas je veux faire le faignant mais sinon à partir de mon petit code, une petite modification ne pourrait-elle pas le faire fonctionner ??

merci