Dass das aber dann doppelt so lange dauert (so kam es mir bei meinen Versuchen jedenfalls vor) ist aber schon klar, oder?
Du lässt zweimal FindFirst für dich Filtern - besser wäre ein Aufruf, wo du selbst Filterst. Ich würde einfach ein faAnyFile benutzen in einem Durchgang, und dann prüfen, ob es eine Datei ist, oder ein Verzeichnis. In etwa so (lieblos hingeklatscht):
Delphi-Quellcode:
procedure FindStuff(Dir: string);
var
Search: TSearchRec;
IsFound: Boolean;
i: Integer;
Dirs: TStringList;
begin
Dirs := TStringList.Create;
try
IsFound := FindFirst(Dir + '*.*', faAnyFile, Search) = 0;
while IsFound do begin
if (Search.Name <> '.') and (Search.Name <> '..') and (not ((Search.Attr and faDirectory) = faDirectory))
then
begin
// Wir haben eine Datei gefunden!
end;
if ((Search.Attr and faDirectory) = faDirectory) and (Search.Name <> '.') and (Search.Name <> '..') then
begin
// Ein Verzeichnis.
Dirs.Add(Dir + Search.Name);
end;
IsFound := FindNext(Search) = 0;
end;
finally
Dirs.Free;
end;
for i := 0 to Dirs.Count - 1 do
FindStuff(Dirs[i]);
end;