Probleme listage fichiers

Résolu
Taron31 Messages postés 199 Date d'inscription vendredi 16 avril 2004 Statut Membre Dernière intervention 28 février 2008 - 25 juil. 2007 à 21:15
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019 - 26 juil. 2007 à 14:52
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

BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
26 juil. 2007 à 14:52
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++
3
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
25 juil. 2007 à 22:23
Regarde ici:
http://www.cppfrance.com/code.aspx?id=16638

ciao...
BruNews, MVP VC++
0
Taron31 Messages postés 199 Date d'inscription vendredi 16 avril 2004 Statut Membre Dernière intervention 28 février 2008
26 juil. 2007 à 14:35
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
0
Rejoignez-nous