Hi,
ich habe noch eine kleine Anmerkung zu Luckies Code
Luckie testet, ob der Datei-/Verzeichnisname mit einem Punkt anfängt, übersieht jedoch den Fakt, das dieses sogar legitim ist, auch wenn der Explorer selbst das nicht zulässt. Von daher möchte ich noch folgenden Code vorschlagen. (Zusätzlich sind Datei- und Verzeichnissuche miteinander verbunden, die Liste ist unsortiert.)
Desweiteren habe ich noch einen try...finally...end Block eingesetzt, welcher garantiert, dass FindClose aufgerufen wird, um die von FindFirst belegten Ressourcen wieder freizugeben.
Code:
procedure FindFiles(Directory: String; Recurse: Boolean; List: TStrings);
var
Res: Integer;
SR: TSearchRec;
begin
if AnsiLastChar(Directory)^ <> '\' then
Directory := Directory + '\';
Res := FindFirst(Directory + '*.*', faAnyFile, SR); try
if Res = 0 then
repeat
if (SR.Name <> '.') and (SR.Name <> '..') then
if SR.Attr and faDirectory = 0 then
List.Add(Directory + SR.Name)
else if Recurse then
FindFiles(Directory + SR.Name, True, List);
until FindNext(SR) <> 0;
finally FindClose(SR);
end;
Ich habe den Code in dieser Form nicht getestet, er sollte aber funktionieren - mehr oder weniger
Parameterliste
- Directory - Startverzeichnis für die Dateisuche
- Recurse - True um Unterverzeichnisse nach Dateien zu durchsuchen
- List - Ein String List (z.B. TStringList), welche die gefundenen Dateien aufnimmt.
Ich hoffe, dass das auch ein wenig hilft.
P.S. Luckie: Nicht böse sein