IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Lister les fichiers d'un répertoire

19/05/2001

Par Maxence Delannoy

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.


Précédent Retour à la table des matières Suivant