![]() |
Verzeichnisse nach Dateien durchsuchen
So, oft gefragt und ab sofort als FAQ verfügbar (Luckie: :mrgreen:) ist eine einfache, rekursive Methode zum Suchen nach Dateien in Verzeichnissen.
Die Methode akzeptiert drei Parameter.
Danke an JKuehl für die Meldung eines Fehlers bei "rekursiver" Suche :mrgreen: Danke an Tomektor für die Meldung eines Folge-Fehlers bei "rekursiver" Suche :mrgreen: Danke an J4N. AnsiLastChar-Konstrukt durch IncludeTrailingPathDelimiter ersetzt. :roll: Danke an mirage228 fur die Meldung eines Flüchtigkeitsfehler, durch mich eingeführt aufgrund der vorangehenden Meldung. :wall:
Delphi-Quellcode:
...:cat:...
//Nur eine der beiden Deklarationen, entsprechend der genutzen Delphiversion einsetzen !!!
// Deklaration bis einschließlich Delphi 4 procedure FindAllFiles(RootFolder, Mask: string; Recurse: Boolean); // Deklaration ab Delphi 5 procedure FindAllFiles(RootFolder: string; Mask: string = '*.*'; Recurse: Boolean = True); var SR: TSearchRec; begin // Implementation bis einschließlich Delphi 4 if RootFolder = '' then Exit; if AnsiLastChar(RootFolder)^ <> '\' then RootFolder := RootFolder + '\'; // Implementation ab Delphi 5 RootFolder := IncludeTrailingPathDelimiter(RootFolder); // * * * * * // nur bis einschließlich Delphi 4 benötigt if Mask = '' then Mask := '*.*'; // * * * * * 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(RootFolder + SR.Name, Mask, Recurse); until FindNext(SR) <> 0; finally FindClose(SR); end; if FindFirst(RootFolder + Mask, 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 // folgende Zeile schreibt den vollständigen Namen in eine Memo Feld des // Formulars Form1 Form1.Memo1.Lines.Add(RootFolder + SR.Name); end; until FindNext(SR) <> 0; finally FindClose(SR); end; end; Ergänzung von Mr Luckie: Das ganze noch mal ohne das hardgecodete Memo in der Prozedur und somit besser allgemein verwendbarer. Ich habe mir den Code in den letzten drei Tagen deswegen extra zwei mal umschreiben müssen. :roll:
Delphi-Quellcode:
[edit=Luckie]Code ergänzt. Mfg, Luckie[/edit]
procedure FindAllFiles(var FileList: TStrings; RootFolder: string; Mask: string =
'*.*'; Recurse: Boolean = True); var SR: TSearchRec; 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, Mask, Recurse); until FindNext(SR) <> 0; finally FindClose(SR); end; if FindFirst(RootFolder + Mask, 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; end; |
Re: Verzeichnisse nach Dateien durchsuchen
mirage228 hat noch auf folgendes hingewiesen:
Zitat:
|
Re: Verzeichnisse nach Dateien durchsuchen
SirThornberry hat diese Methode noch ein wenig beschleunigt. Der entsprechende SourceCode ist
![]() |
Re: Verzeichnisse nach Dateien durchsuchen
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:51 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