Wenn nur eine bestimmte Datei gesucht wird, warum die Suchmaske von FindFirst/FindNext nicht gleich richtig initialisieren und Like ganz weglassen? Denkfehler... ohne Like (Einzelprüfung) geht rekusive Suche nicht, da für SubDirs ja alle Ordner gelistet werden müssen.
Laufwerke, dessen FAT nicht im Cache ist, brauchen beim ersten durchsuchen aber immer etwas länger.
Für jedes Laufwerk, das durchsucht werden soll aufrufen.
Delphi-Quellcode:
procedure FindFiles(const StartDir, Filter : String; SubDirs : Boolean; ResultList : TStringList);
var
SR : TSearchrec;
Found : Integer;
Dir : String;
begin
Dir := IncludeTrailingPathDelimiter(StartDir);
Found := FindFirst(Dir + '*.*', faAnyFile, SR);
while Found = 0 do begin
if SubDirs
and (SR.Attr and faDirectory = faDirectory)
and (SR.Name[1] <> '.') then
FindFiles(Dir + SR.Name, Filter, SubDirs, ResultList);
if Like(SR.Name, Filter) then
ResultList.Add(Dir + SR.Name);
Found := FindNext(SR);
end;
FindClose(SR);
end;