2009-09-24 9 views
0

J'essaye d'obtenir l'appel d'API Windows FindFileFirst() pour fonctionner et il échoue totalement à chaque tentative. J'ai essayé ., C: \ *. *, .txt, C: \ .txt et pourtant il ne même pas itérer les noms de répertoires. Je ne sais plus quoi essayer. J'obtiens ERROR_FILE_NOT_FOUND 2 (0x2) en arrière quand j'appelle GetLastError(). Merci pour toute l'aide que vous pouvez nous apporter.FindFileFirst() Valeur du handle non valide pour chaque chemin d'accès

HANDLE hFind; 
LPWIN32_FIND_DATA FindFileData; 

hFind = FindFirstFile("*.*", &FindFileData); 

if(hFind == INVALID_HANDLE_VALUE) 
{ 
    printf("\nFindFirstFile failed (%u)\n",GetLastError()); 
    return; 
} 

do 
{ 
    if(FindFileData->dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) 
    { 
     if(FindFileData->cFileName[0] != '.') 
      continue; 
     else 
      searchDir(makePath(path, FindFileData->cFileName)); 
    } 

    printf("Found %s %s\n", 
     FindFileData->dwFileAttributes,FindFileData->cFileName); 
    FindClose(hFind); 
} 
while(FindNextFile(hFind, &FindFileData)); 

FindClose(hFind); 

Répondre

2

LPWIN32_FIND_DATA FindFileData;

Vous utilisez le pointeur FindFileData sans lui allouer de mémoire.

utilisation de cette façon .. ("retirer LP")

WIN32_FIND_DATA FindFileData; // cela utilisera la pile mémoire

alors se référer aux membres comme FindFileData.dwFileAttributes au lieu de FindFileData-> dwFileAttributes

0

vous devez vous assurer de doubler le chemin des barres obliques

dire "c:\\*.*"

il devrait fonctionner correctement.

0

Et maintenant, une surprise de FindFirstFile Function.

Comme indiqué précédemment, vous ne pouvez pas utiliser un barre oblique inversée() dans la chaîne d'entrée lpFileName pour FindFirstFile, donc il peut ne pas être comment rechercher la racine répertoires. Si vous voulez voir les fichiers ou d'obtenir les attributs d'un répertoire racine , les options suivantes se appliquer:

  • Pour examiner les fichiers dans un répertoire racine, vous pouvez utiliser « C: * » et étape à travers le répertoire en utilisant FindNextFile. Pour obtenir les attributs d'un répertoire racine, utilisez la fonction de GetFileAttributes.

Par exemple, vous ne pouvez pas utiliser "C:\\*.txt" pour rechercher les fichiers texte dans le répertoire racine
mais dans les sous-répertoires que ça va marcher.

Questions connexes