Moin Marcel,
ein paar Sachen, die mir so aufgefallen sind:
Das
if Path[Length(Path)] <> '\' then Path := Path + '\'
geht schief, wenn Path leer ist.
Zwei Lösungsansätze:
Delphi-Quellcode:
Path := IncludeTrailingPathDelimiter(Path);
// oder
if (Length(Path) > 0) and (Path[Length(Path)] <> '\') then Path := Path + '\';
Ausserdem noch etwas, das definitiv falsch ist:
(Search.Name[1] <> '.')
filtert auch gültige Verzeichnisnamen heraus.
Du musst explizit auf
(Search.Name <> '.') and (Search.Name <> '..')
prüfen, da ein Datei-/Verzeichnisname durchaus mit einem . beginnen kann.
List würde ich auch nicht als Wert- sondern als Const-Parameter übergeben, damit man nicht versehentlich bei einer Überarbeitung List einen Wert zuweist, und sich dann anschliessend wundert, warum man kein Ergebnis zurück erhält.
Ich für meinen Teil verwende sogar ausschliesslich Var- oder Const-Parameter