Réponse acceptée !
Bonjour,
Il faut utiliser le filtre passé en argv[1] ("*.c" dans l'exemple) avec FindFirstFile() puis boucler avec FindNextFile().
Voici un exemple de petit programme console qui liste des fichiers suivant un filtre passé en paramètre :
#include <stdio.h>
#include <windows.h>
int main(int argc,char** argv)
{
// --- Filtre des fichiers
char szFiltre[MAX_PATH];
if (argc == 1)
strcpy(szFiltre,"*.*");
else
strcpy(szFiltre,argv[1]);
printf("\nLister les fichiers \"%s\" :\n",szFiltre);
// --- Positionner sur le premier fichier
WIN32_FIND_DATA Find;
HANDLE hFichier = FindFirstFile(szFiltre,&Find);
if (hFichier == INVALID_HANDLE_VALUE)
{
printf("*** Aucun fichier correspondant au filtre ***\n");
return 0;
}
// --- Parcourir les fichiers
int iCompteur = 0;
do
{
// --- Ne pas traiter les répertoires
if (Find.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) continue;
// --- Ne pas traiter les fichiers système
if (Find.dwFileAttributes & FILE_ATTRIBUTE_SYSTEM) continue;
// --- Fichier à traiter
++iCompteur;
printf("%d : %s\n",iCompteur,Find.cFileName);
} while (FindNextFile(hFichier,&Find));
printf("%d fichier(s)\n",iCompteur);
// --- Fermer la recherche
FindClose(hFichier);
return 0;
}
Ce qui donne (le programme se nomme test) :
test
Lister les fichiers "*.*" :
1 : Test.exe
2 : Test.obj
3 : Test.pch
4 : vc60.idb
4 fichier(s)
test *.exe
Lister les fichiers "*.exe" :
1 : Test.exe
1 fichier(s)
test *.cpp
Lister les fichiers "*.cpp" :
*** Aucun fichier correspondant au filtre ***
Jean-François