den Link hab ich im Nachhinein erst eingefügt weil er nicht so leicht zu finden ist. Hab die Funktion mal versucht etwas zu optimieren (findallFiles).
Dabei hab ich eine InlineProcedure verwendet damit nicht bei jedem rekursiven Aufruf
"IncludeTrailingPathDelimiter" erneut aufgerufen wird.
Desweiteren hab ich einen weiteren Parameter hinzugefügt mit dem man auch angeben kann ob die
Verzeichnisnamen mit aufgelistet werden (macht ja manchmal sinn wenn man den Ordnerinhalt sehen will, wie im TotalCommander etc.)
In diesem Zusammenhang wird im Property Object auch mit gespeichert ob das Item ein Ordner ist oder nicht. Somit kann man später bei der Darstellung des Inhaltes Ordner und Dateien verschieden kennzeischnen.
Delphi-Quellcode:
procedure FindAllFiles(FileList: TStrings; RootFolder: string; Mask: string ='*'; Recurse: Boolean = True; AddFolderNames: Boolean = False);
procedure LFindAllFiles(AParentFolder: String);
var LSearchRec: TSearchRec;
begin
if FindFirst(AParentFolder + '*', faAnyFile, LSearchRec) = 0 then
begin
repeat
if (LSearchRec.Name <> '.') and (LSearchRec.Name <> '..') then
begin
if LSearchRec.Attr and faDirectory = faDirectory then
begin
if AddFolderNames and Like(Mask, AnsiLowerCase(LSearchRec.Name)) then
FileList.AddObject(AParentFolder + LSearchRec.Name, TObject(True));
if Recurse then
FindAllFiles(FileList, AParentFolder + LSearchRec.Name + '\');
end
else if Like(Mask, AnsiLowerCase(LSearchRec.Name)) then
FileList.AddObject(AParentFolder + LSearchRec.Name, TObject(False));
end;
until FindNext(LSearchRec) <> 0;
FindClose(LSearchRec);
end;
end;
begin
Mask := AnsiLowerCase(Mask);
LFindAllFiles(IncludeTrailingPathDelimiter(RootFolder));
end;