Lister les fichiers

Soyez le premier à donner votre avis sur cette source.

Snippet vu 6 395 fois - Téléchargée 31 fois

Contenu du snippet

Cette procédure permet de lister tous les fichiers d' une arborescence.
De plus, la fonction permettant de traiter les fichiers trouvés est
passée en paramètre, ce qui évite d' avoir à la retoucher (on utilise un pointeur de fonction).

Source / Exemple :


type
      Tfproc =   procedure (basedir:string;Data:TsearchRec);
      //Pointeur de fonction
      PTfproc = ^TfProc;

//Procédure générale
procedure EnumFiles(Basedir : string;Filter:String;Fproc:PTfproc);
var
Fdata: TSearchRec;
Search: string;
Hfile: integer;
begin
search := Basedir + '\'+ Filter;
Hfile := findfirst(search,faAnyFile,Fdata);
if (Hfile = 0) then
begin
        if ((Fdata.Attr or faDirectory) = faDirectory) and (Fdata.Name <> '.') and (Fdata.name <> '..') then
        begin
                EnumFiles(Basedir + '\' + fdata.Name ,filter,Fproc);
        end;
        if (Fdata.Name <> '.') and (Fdata.name <> '..') then Fproc^(Basedir,Fdata);
        while Findnext(Fdata) = 0 do
        begin
                if ((Fdata.Attr or faDirectory) = faDirectory) and (Fdata.Name <> '.') and (Fdata.name <> '..') then
                begin
                   EnumFiles(Basedir + '\' + fdata.Name ,filter,Fproc);
                end;
                if (Fdata.Name <> '.') and (Fdata.name <> '..') then Fproc^(Basedir,Fdata);
        end;
end;
findclose(fdata);
end;

//Procedure simple qui affiche le texte en mode console
procedure Affiche(basedir:string;Data:TsearchRec);
begin
        writeln(Data.Size);
        writeln(basedir + '\' + Data.Name);
end;

//Code exemple ici
var
Basedir,Filter : string;
Fct : PTfproc;
begin
writeln('Repertoire de base');
readln(Basedir);
fct := @Affiche;
enumfiles(Basedir,'*.*',@Fct);
readln;
end.

Conclusion :


Note: la fonction affiche est passée en paramètre.
Vous pouvez utiliser n' importe quelle fonction mais la déclaration doit être:
procedure (basedir:string;Data:TsearchRec);

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.