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:
- 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.
- Vous bouclez ensuite sur la lecture des autres fichiers répondant au critère de recherche via la fonction FindNextFile().
- Pour enfin terminer la recherche via la fonction FindClose(). Ceci aura pour effet de libérer les ressources utilisées lors de la recherche.
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.
Comme elles
retournent tous types de fichiers, elles pourront
aussi retourner . et ..
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é.
(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...