Pour lister les fichiers d'un répertoire, nous allons faire appel aux fonctions
FindFirst
,
FindNext
et
FindClose
ainsi qu'à la structure
TSearchRec
.
void TForm1::Search(AnsiString FilePath, TStringList * Extensions, TStrings * ListeFichiers)
{
TSearchRec Infos_fichier;
if (!FindFirst(FilePath+"*.*", faAnyFile, Infos_fichier))
do
{
for (int i=0; iExtensions-Count; i++)
{
if (ExtractFileExt(Infos_fichier.Name).LowerCase() == Extensions-Strings[i].LowerCase())
ListeFichiers-Add(ExpandFileName(Infos_fichier.Name));
}
}
while(!FindNext(Infos_fichier));
FindClose(Infos_fichier);
}
Voici donc notre fonction. Les paramètres qui doivent lui être passés sont respectivement
FilePath
, le répertoire dans lequel il faut faire la recherche,
Extensions
, la liste des extensions à recenser et enfin,
ListeFichiers
, un objet de type TStrings dans lequel on récupère la liste des fichiers.
La fonction crée une structure Infos_fichier qui permettra à la fonction FindFirst de stocker des informations sur les fichiers trouvés. Regardez l'aide sur FindFirst pour avoir plus de précisions sur celle-ci. Sachez simplement qu'elle attend en premier argument le répertoire de recherche, en second argument le type de fichiers à rechercher et enfin, la structure dans laquelle elle va stocker ses données. Cette fonction retourne 0 si elle trouve un fichier. Dans ce cas, on commence la boucle do...while. C'est la fonction FindNext qui prend le relais, FindFirst ne servant que pour la première fois.
Ensuite, on parcourt la liste des extensions et on regarde si l'extension du fichier trouvé
SRec.Name
correspond à une de la liste, dans ce cas, on l'ajoute.
Enfin, on libère la mémoire allouée dans la structure avec FindClose.
Cette fonction peut être utilisée de la manière suivante. Placez une ListBox sur votre fiche :
void __fastcall TForm1::Button1Click(TObject *Sender)
{
TStringList *Extensions = new TStringList; // On construit la liste des extensions
Extensions->Add(".cpp");
Extensions->Add(".h");
// Appel à notre fonction, avec pour liste des fichiers, les items de la ListBox.
Search(ExtractFilePath(Application->ExeName), Extensions, ListBox1->Items);
delete Extensions;
}