Man muss sich ja nicht mit FindFirst / FindNext rumschlagen. In der Codelib sind ja auch Beiträge zum suchen von Dateien, die dann einfach ein bisschen umschreiben...
Delphi-Quellcode:
procedure GetFilesInDirectory(Directory: String; const Mask: String;
List: TStrings;
WithSubDirs, ClearList: Boolean);
procedure ScanDir(const Directory: String);
var
SR: TSearchRec;
Dir : string;
begin
if FindFirst(Directory + Mask, faAnyFile, SR) = 0 then try
repeat
Application.ProcessMessages;
IF (Dir <> Directory) THEN
begin
List.Add(Directory);
Dir := Directory;
end;
until FindNext(SR) <> 0;
finally
FindClose(SR);
end;
if WithSubDirs then begin
if FindFirst(Directory + '*.*', faAnyFile, SR) = 0 then try
repeat
Application.ProcessMessages;
if ((SR.attr and faDirectory) = faDirectory) and
(SR.Name <> '.') and (SR.Name <> '..') then
ScanDir(Directory + SR.Name + '\');
until FindNext(SR) <> 0;
finally
FindClose(SR);
end;
end;
end;
begin
List.BeginUpdate;
try
if ClearList then
List.Clear;
if Directory = '' then Exit;
if Directory[Length(Directory)] <> '\' then
Directory := Directory + '\';
ScanDir(Directory);
finally
List.EndUpdate;
end;
end;
Aufruf:
GetFilesInDirectory('C:\', '*.*', ListBox1.Items, True, True);
Natürlich ist die Methode etwas zeitintensiv....
Edit1: Application.Pro
cessMessages...