![]() |
Verzeichnisse nach Dateien durchsuchen (mehrere Masken)
Ich habe noch einen Verbesserungsvorschlag für die rekursive Suche nach Dateien (
![]() Ich habe das Ganze so gelöst:
Delphi-Quellcode:
Vergleichswerte:
procedure FindAllFiles(const FileList: tstrings;RootFolder: string; Maske: array of string; Recurse: Boolean = True);
var SR: TSearchRec; i : integer; begin RootFolder := IncludeTrailingPathDelimiter(RootFolder); if Recurse then if FindFirst(RootFolder + '*.*', faAnyFile, SR) = 0 then try repeat if SR.Attr and faDirectory = faDirectory then // --> ein Verzeichnis wurde gefunden // der Verzeichnisname steht in SR.Name // der vollständige Verzeichnisname (inkl. darüberliegender Pfade) ist // RootFolder + SR.Name if (SR.Name <> '.') and (SR.Name <> '..') then FindAllFiles(FileList, RootFolder + SR.Name, Maske, Recurse); until FindNext(SR) <> 0; finally FindClose(SR); end; i := 0; repeat begin if FindFirst(RootFolder + '*' + Maske[i], faAnyFile, SR) = 0 then try repeat if SR.Attr and faDirectory <> faDirectory then begin // --> eine Datei wurde gefunden // der Dateiname steht in SR.Name // der vollständige Dateiname (inkl. Pfadangabe) ist // RootFolder + SR.Name FileList.Add(RootFolder + SR.Name); end; until FindNext(SR) <> 0; finally FindClose(SR); end; i := i + 1; end until i = high(maske) + 1; end; - Partition mit 52.543 Dateien, 1949 Ordner - gesucht wurden 11 Masken, insgesamt ~2634 relevante Dateien - Methode mit 1 Maske, welche dann 11 mal mit untersch. Parametern ausgeführt wurde: 5 Sekunden - Methode, in der alle Masken als Array übergeben werden: 2 Sekunden P.S.: ich bin bei meinem Maskenarray davon ausgegangen, dass sie z.b. '.mp3' definiert werden. Daher wird im
Delphi-Quellcode:
auch noch das Sternchen ('*') hinzugefügt.
if FindFirst(RootFolder + '*' + Maske[i], faAnyFile, SR) = 0 then
[edit=Matze] Mfg, Matze[/edit] |
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:50 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz