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

Windows Discussion :

Listing du disque dur


Sujet :

Windows

  1. #1
    Membre à l'essai
    Inscrit en
    Février 2006
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 31
    Points : 18
    Points
    18
    Par défaut Listing du disque dur
    Bonjour, j'ai besoin de lister tous les fichiers du disque dur à la recherche de fichiers à l'extension spéficique (par ex .mp3 et .avi), j'ai deja essaye un code mais sans succés :

    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
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    void list_hd(char *szHD)
    {
        WIN32_FIND_DATA wfd;
       
        DWORD dwLen, dwLenHD;
        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((wfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) ) {
                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;
    }
    Ne faites pas attention aux allocation mémoire, il faut les supprimer, c'est une horreur... Ce qui ne fonctionne pas est la récursivité : lorsque je detecte un DIRECTORY, je reconstruit un path que je renvoie en récursivité à la meme fonction, cependant par la suite, cette fonction ne parvient pas à ouvrir ce dossier (erreur 123 : invalid name or path), alors que lorsque j'appelle directement cette fonction (à partir de main()) avec le meme path, cela fonctionne pour ce path, mais la récursivité ne fonctionne toujours pas.

    Si vous avez une petite idée... ou même un code ...

    Merci

  2. #2
    Membre actif Avatar de Twindruff
    Inscrit en
    Janvier 2005
    Messages
    216
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 216
    Points : 237
    Points
    237
    Par défaut
    Déjà tu n'as pas à appeler spécifiquement les version ansi/unicode explicitement comme tu le fais avec FindFirstFileA. Je vois que tu veux être en ANSI le problème c'est que visual studio quand tu crées un projet le met par défaut en unicode, tu peux le mettre en ansi en allant dans les propriétés du projet, dans "Propriétés de la configuration -> général" et "Jeu de caractères" à "Non défini".
    Et en plus t'auras plus de convertir tes chaînes.
    Le mieux est d'utiliser la macro TCHAR, qui vaut char quand t'es en ANSI et wchar_t en Unicode.

  3. #3
    Membre actif Avatar de Twindruff
    Inscrit en
    Janvier 2005
    Messages
    216
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 216
    Points : 237
    Points
    237
    Par défaut
    Ah oui et pour ta question et faut appeler FindFirstFile sur "C:\\*" (c'est un répertoire racine) cf msdn

  4. #4
    Membre à l'essai
    Inscrit en
    Février 2006
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 31
    Points : 18
    Points
    18
    Par défaut
    ok mais une fois que je trouve un dossier, je dois renvoyer quel path à list_h ?

    "C:\\DIRECTORY\\*" ??? parce que j'ai deja teste et ça fonctionnait pas...

  5. #5
    Membre actif Avatar de Twindruff
    Inscrit en
    Janvier 2005
    Messages
    216
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 216
    Points : 237
    Points
    237
    Par défaut
    T'as lu la doc que je t'ai passé ?
    To examine a directory that is not a root directory, use the path to that directory, without a trailing backslash. For example, an argument of "C:\windows" returns information about the directory "C:\windows", not about a directory or file in "C:\windows". An attempt to open a search with a trailing backslash always fails.
    essaies avec "C:\\Windows".

  6. #6
    Membre à l'essai
    Inscrit en
    Février 2006
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 31
    Points : 18
    Points
    18
    Par défaut
    salut, merci mais toujours le meme probleme, erreur 123 "invalid name or path", je ne peux faire un FindFirstFile sur ce dossier et lister les fichiers ou sous-repertoires dedans, une autre idée ?

    merci beaucoup

Discussions similaires

  1. [WD11] Liste Fichier du disque dur
    Par CSharpMania dans le forum WinDev
    Réponses: 9
    Dernier message: 10/02/2008, 13h09
  2. comment connaitre la liste des disque dur sur un pc?
    Par Jayceblaster dans le forum Delphi
    Réponses: 2
    Dernier message: 22/10/2006, 12h20
  3. Réponses: 6
    Dernier message: 08/08/2006, 11h57
  4. Réponses: 3
    Dernier message: 09/01/2004, 14h37
  5. Récupèrer la liste des disques durs
    Par Tililian dans le forum C++Builder
    Réponses: 4
    Dernier message: 19/06/2003, 12h42

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