1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76
| function ConstruitListeFichiers(const Chemin: string; const ListeFichiers: TStrings): Boolean;
var
RepertoireRacine: string;
Repertoires: TStringList;
IDRepertoireCourant: Integer;
Compteur: Integer;
procedure ConstruitListeRepertoires;
var SR: TSearchRec;
Rslt: Integer;
begin
Compteur := Repertoires.Count - 1;
IDRepertoireCourant := 0;
while IDRepertoireCourant <= Compteur do
begin
// Recherche sous-répertoires
Rslt := FindFirst(Repertoires[IDRepertoireCourant] + '*.*', faDirectory, SR);
try
while Rslt = 0 do
begin
if (SR.Name<>'.') and (SR.Name<>'..') and
(SR.Attr and faDirectory=faDirectory) then
Repertoires.Add(Repertoires[IDRepertoireCourant] + SR.Name + '\');
Rslt := FindNext(SR);
end;
finally
FindClose(SR);
end;
Compteur := Repertoires.Count - 1;
Inc(IDRepertoireCourant);
end;
end;
procedure RemplieListeFichiers(CompteurCourant: Integer);
var
SR: TSearchRec;
Rslt: Integer;
RepertoireCourant: string;
AFileExt:string;
begin
RepertoireCourant:=Repertoires[CompteurCourant];
Rslt:=FindFirst(RepertoireCourant+'*.*',faAnyFile-faDirectory,SR);
try
while ((Rslt=0)) do
begin
AFileExt:=ExtractFileExt(SR.Name);
if (AFileExt='.txt') or (AFileExt='.TXT'))
then ListeFichiers.Add(RepertoireCourant+SR.Name);
Rslt := FindNext(SR);
end;
finally
FindClose(SR);
end;
end;
begin
Assert(Assigned(ListeFichiers));
RepertoireRacine:=ExtractFilePath(Chemin);
Repertoires:=TStringList.Create;
ListeFichiers.BeginUpdate;
try
Repertoires.Add(RepertoireRacine);
// Recherche récursive dans les sous répertoires
ConstruitListeRepertoires;
for Compteur := 0 to Repertoires.Count - 1
do RemplieListeFichiers(Compteur);
finally
Repertoires.Free;
ListeFichiers.EndUpdate;
end;
Result := True;
end; |
Partager