19/05/2001
Par Maxence Delannoy
WindowsOn utilise les fonctions FindFirst, FindNext et FindClose de l'unité SysUtils. Exemple : Placez une ListBox sur une fiche, puis tapez le code suivant dans le gestionnaire OnCreate de la fiche : { Liste tous les fichiers contenus dans la racine de C: } procedure TForm1.FormCreate(Sender: TObject); var R: Integer; SearchRec: TSearchRec; begin R := FindFirst('C:\*.*', faAnyFile, SearchRec); try while R = 0 do begin ListBox1.Items.Add(SearchRec.Name); R := FindNext(SearchRec); end; finally FindClose(SearchRec); end; end; Nota : Il ne faut surtout pas oublier l'appel à FindClose qui permet à Windows de libérer la mémoire. L'enregistrement de type TSearchRec contient non seulement le nom du fichier, mais également la taille, la date de dernière modification... etc. Consultez l'unité SysUtils ou l'aide Windows (API FindFirstFile) pour plus d'informations. LinuxLes fonctions FindFirst, FindNext et FindClose existent également. Mais elles fonctionnent un peu différemment. En effet, Linux ne fait pas de distinction entre le point et les autres caractères. Si vous utilisez le code ci-dessus sous Linux pour lister tous les fichiers d'un répertoire, les fichiers sans extension ne seront pas pris en compte. Pour éviter ce problème, il faut utiliser '*' à la place de '*.*'. De même, le système de fichiers de Linux n'utilise pas de lettres pour désigner ses lecteurs. L'ensemble des fichiers est contenu dans une seule et même arborescence. Le point de départ de cette arborescence est désigné par le caractère "/" et on l'appelle "root" (racine en Anglais). Enfin, veuillez noter que les différents répertoires formant un chemin sont séparés par le caractère "/" et non pas par le caractère "\". On dispose de plusieurs méthodes pour lister les fichiers contenus dans un répertoire sous Linux. L'une d'entre elles utilise la fonction scandir de l'unité Libc. Exemple : { Affiche la liste des fichiers contenus dans le répertoire racine en les triant par ordre alphabétique } program scan; uses Libc; var ListeDesNoms: PPDirEnt; // Pointeur sur un pointeur sur une entrée de // répertoire n: Integer; begin n := scandir('/', ListeDesNoms, nil, alphasort); if n < 0 then PError('scandir') else begin while n > 0 do begin Writeln(ListeDesNoms^.d_name); Inc(ListeDesNoms); Dec(n); end; end; end. L'avantage de cette fonction, c'est qu'en l'utilisant en conjonction avec la fonction alphasort, on peut obtenir une liste de fichier triés par ordre alphabétique.
|