{Liste (avec ou sans chemin complet) les fichiers d'un répertoire filtrés par leur extension,
ou tous les fichiers si aucune extension passée à la procedure.
SortFlag = 0 => Liste triée par ordre alphabétique
SortFlag = 1 => Liste triée par date de modification
SortFlag = 2 => Liste triée par date de création}
PROCEDURE FindFiles(Path: String; var ExtList, FilesList: TStringList;
Const SortFlag : Integer = 0; Const FullPathName : Boolean = false);
VAR FileInfo : TSearchRec;
i : Integer;
S : string;
DateFormat : string;
function IsWanted(FileName : String): Boolean;
var i : Integer;
begin
result := false;
if (FileName='.') or (FileName='..') then exit;
if ExtList.Count=0 then begin
result := true;
Exit;
end;
for i := 0 to ExtList.Count-1 do begin
if AnsiUpperCase(ExtractFileExt(FileName))=AnsiUpperCase(ExtList[i]) then begin
result := true;
Break;
end;
end;
end;
function FileTimeToString(FileTime : TFileTime): String;
var SysTime : TSystemTime;
LocalTime : TFileTime;
begin
result := '-------------------';
if FileTimeToLocalFileTime( FileTime, LocalTime ) then begin
if FileTimeToSystemTime( LocalTime, SysTime ) then begin
result := DateTimeToStr(SystemTimeToDateTime(SysTime));
end;
end;
end;
BEGIN
Path := IncludeTrailingPathDelimiter(Path);
if not DirectoryExists(Path) then Exit;
DateFormat := ShortDateFormat;
ShortDateFormat := 'yyyy/MM/dd';
if FindFirst(Path+'*', faAnyFile, FileInfo)=0 then begin
repeat
if IsWanted(FileInfo.Name) then
case SortFlag of
0 : begin
if FullPathName then FilesList.Add(Path + FileInfo.Name)
else FilesList.Add(FileInfo.Name);
end;
1 : begin
if FullPathName then FilesList.Add(DateTimeToStr(FileDateToDateTime(FileInfo.Time)) + Path + FileInfo.Name)
else FilesList.Add(DateTimeToStr(FileDateToDateTime(FileInfo.Time)) + FileInfo.Name);
end;
2 : begin
if FullPathName then FilesList.Add(FileTimeToString(FileInfo.FindData.ftCreationTime) + Path + FileInfo.Name)
else FilesList.Add(FileTimeToString(FileInfo.FindData.ftCreationTime) + FileInfo.Name);
end;
end;
Until FindNext(FileInfo)<>0;
end;
ShortDateFormat := DateFormat;//On rétablit le ShortDateFormat.
if SortFlag <> 0 then begin
FilesList.Sort;
for i := 0 to FilesList.Count-1 do begin
S := FilesList[i];
Delete(S,1,19);//On élimine les dates.
FilesList[i] := S;
end;
end;
FindClose(FileInfo);
END;
{Exemple 1
Liste les fichiers *.txt et *.rtf triés par ordre de création
avec leur chemin complet :
var ExtList : TStringList;
FilesList : TStringList;
...
ExtList := TStringList.Create;
FilesList := TStringList.Create;
try
ExtList.Add('.txt');
ExtList.Add('.rtf');
FindFiles(Edit1.Text, ExtList, FilesList, 2, true);
ListBox1.Items.Assign(FilesList);
finally
FilesList.Free;
ExtList.Free ;
end;}
{Exemple 2
Liste tous les fichiers triés par ordre alphabétique :
var ExtList : TStringList;
FilesList : TStringList;
...
ExtList := TStringList.Create;
FilesList := TStringList.Create;
try
FindFiles(Edit1.Text, ExtList, FilesList);
ListBox1.Items.Assign(FilesList);
finally
FilesList.Free;
ExtList.Free ;
end; }