Enumération des fichiers

 

Consiste à récupérer une liste de fichiers par rapport à un critère de recherche correspondant à une partie ou à la totalité du nom du ou des fichiers à énumérer. Il est en effet possible d'utiliser les ? ou *, sinon, cela ne serait pas très intéressant !

L'énumération de fichiers se fait en trois étapes:

  1. Tout d'abord vous utiliserez la fonction FindFirstFile() pour trouver le premier fichier répondant au critère de recherche et pour initialiser un buffer qui permettra à Windows de continuer la recherche ensuite.
  2. Vous bouclez ensuite sur la lecture des autres fichiers répondant au critère de recherche via la fonction FindNextFile().
  3. Pour enfin terminer la recherche via la fonction FindClose(). Ceci aura pour effet de libérer les ressources utilisées lors de la recherche.

Image non trouvée ! Ces fonctions retournent tous types de fichiers, donc y compris les répertoires. Si vous ne voulez énumérer que les fichiers, ce sera à vous de vérifier le type du fichier. Heureusement, les fonctions retournent ces informations.

Image non trouvée ! Comme elles retournent tous types de fichiers, elles pourront aussi retourner . et ..

Image non trouvée !Ces fonctions ne sont pas récurcives ! Elles ne travaillent en effet que sur un niveau d'arborescence. A vous de faire en sorte de travailler sur les niveaux inférieures en répétant les étapes de l'énumération suivant le type du fichier trouvé.

Image non trouvée !(Encore !) C:\toto ne va pas indiquer les fichiers qui se trouvent dans le répertoire toto ! Il faudra utiliser les jokers comme c:\toto\*.* si vous voulez énumérer le contenu du répertoire toto !

 

Détail des fonctions:

HANDLE FindFirstFile(
LPCTSTR lpFileName,
LPWIN32_FIND_DATA lpFindFileData
);

Paramètres:

lpFileName : Pointant sur une chaîne de caractères terminée par \000 qui contiendra le critère de recherche. (Vous pourrez utiliser * ou ?)

lpFindFileData :Pointeur sur une structure WIN32_FIND_DATA qui recevra les informations concernant le fichier trouvé.

En sortie:

La fonction retourne un handle de recherche sur le fichier trouvé. Si la valeur vaut INVALID_HANDLE_VALUE, alors il y a une erreur. Utilisez GetLastError() pour connaître le problème.

 

BOOL FindNextFile(
HANDLE hFindFile,
LPWIN32_FIND_DATA lpFindFileData
);

Paramètres:

hFindFile: Le handle de recherche retourné par la fonction FindFirstFile.

lpFindFileData: Toujours un pointeur sur une structure WIN32_FIND_DATA qui recevra les informations concernant le fichier trouvé.

En sortie, si la valeur est NULL, alors il y a un problème. GetLastError pour connaître l'erreur. Cette fonction pourra retourner ERROR_NO_MORE_FILES s'il n'y a plus d'autres fichiers répondant au critère.

 

BOOL FindClose(
HANDLE hFindFile
);

Pour fermer le handle de recherche...