Hi,
ich versuche gerade eine rekursive Funktion für ein Dateiensuche durch alle Unterordner des Startordners hinzukriegen. Nun habe ich folgende
Unit geschrieben:
Delphi-Quellcode:
unit UDeepSearch;
interface
uses
Classes, QDialogs, QForms, SysUtils;
procedure DeepSearch;
function ScanFor(ADir, AMask:
String): TStringList;
const RootDir = '
C:\Program Files\Borland\Delphi6\Projects\DeepSearch\Test\';
implementation
procedure DeepSearch;
var SLFiles: TStringList;
begin
SLFiles := TStringList.Create;
SLFiles.Clear;
SLFiles.AddStrings(ScanFor(RootDir, '
.jpg'));
ShowMessage(IntToStr(SLFiles.Count));
SLFiles.Free;
end;
function ScanFor(ADir, AMask:
String): TStringList;
var SR: TSearchRec;
begin
Result.Clear;
if FindFirst(ADir + '
*.*', faAnyFile, SR) = 0
then
begin
repeat
if (SR.Attr = faDirectory)
and (SR.
Name <> '
.')
and (SR.
Name <> '
..')
then
Result.AddStrings(ScanFor(ADir + SR.
Name + '
\', AMask))
else if Pos(AMask, SR.
Name) > 0
then
Result.Add(ADir + SR.
Name);
until FindNext(SR) <> 0;
FindClose(SR);
end;
end;
end.
Die Prozedur "DeepSearch" ist nur zum testen geschrieben worden. Ich habe meine Photoalben (alles jpg) in RootDir kopiert. Aber die Zahl, die als Ergebnis (SLFiles.Count) ausgegeben wird, ist VIEL zu klein. Warum funktioniert die Rekursion nicht? Was muss ich ggf. korrigieren?