Windows
On 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.
Linux
Les 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.
|