Matze meinte ja ich solle mein "Wissen" teilen
ohne Recursion würde es z.B. auch so gehn
- ein Verzeichnis kann maximal MAX_PATH lang sein
(inklusive abschließender PChar-#0 und der Laufwerkskennung)
- macht also 255 Zeichen für den Pfad
- ein Pfad kann mindestens 1 Zeichen lang sein
- macht sozusagen 255/2 = maximal 127 Verzeichnisebenen
bedeutet du müßtest 127 Leseschleifen verschachteln
Hier mal der gekürzte Code ... für die ersten 3 und die letzte Schleife
(die restlichen 123 Schleifen müßte man also NUR noch einfügen und durchnummerieren)
Delphi-Quellcode:
Procedure FindAllFilesWithoutRekursion(Dir:
String; SL: TStrings);
Var R1, R2, R3, R4, R5 ... R127: TSearchRec;
D2, D3, D4, D5 ... D127:
String;
Begin
Dir := IncludeTrailingPathDelimiter(Dir);
If FindFirst(Dir + '
*.*', R1) = 0
Then Begin
Repeat
If (R1.
Name = '
.')
or (R1.
Name = '
..')
Then Continue;
If R1.Attr
and faDirectory <> 0
Then Begin
D2 := Dir + R1.
Name + '
\';
If FindFirst(D2 + '
*.*', R2) = 0
Then Begin
Repeat
If (R2.
Name = '
.')
or (R2.
Name = '
..')
Then Continue;
If R2.Attr
and faDirectory <> 0
Then Begin
D3 := D2 + R2.
Name + '
\';
If FindFirst(D3 + '
*.*', R3) = 0
Then Begin
Repeat
If (R3.
Name = '
.')
or (R3.
Name = '
..')
Then Continue;
If R3.Attr
and faDirectory <> 0
Then Begin
...
D127 := D126 + R126.
Name + '
\';
If FindFirst(D127 + '
*.*', R127) = 0
Then Begin
Repeat
If (R127.
Name = '
.')
or (R127.
Name = '
..')
Then Continue;
If R127.Attr
and faDirectory <> 0
Then
Raise Exception.Create('
zuviele Verzeichnisse gefunden');
Else SL.Add(D127 + R127.
Name);
Until FindNext(R127) <> 0;
FindClose(R127);
End;
...
End Else SL.Add(D3 + R3.
Name);
Until FindNext(R3) <> 0;
FindClose(R3);
End;
End Else SL.Add(D2 + R2.
Name);
Until FindNext(R2) <> 0;
FindClose(R2);
End;
End Else SL.Add(Dir + R1.
Name);
Until FindNext(R1) <> 0;
FindClose(R1);
End;
End;
also ganz im Ernst ... lerne lieber das mit der Rekursion
PS: wenn man sich den Code so ansieht, dann kann man das ganze auch ganz schön via Interation lösen