Moin Stamper,
also mir fallen da, auf Anhieb, ein paar unschöne Stellen auf
Erstens:
Delphi-Quellcode:
const
FileAttr = faReadOnly+faHidden+faArchive;
Flags
niemals mit + verknüpfen, sondern immer mit or.
Das hat hier zwar keine Auswirkungen, aber besser Du gewöhnst Dir das + gar nicht erst an (ich weiss, in der Delphi-Hilfe steht es auch mit +, aber dadurch wird's nicht besser
)
Hintergrund:
Sollte bei verschiedenen Konstanten mal das gleiche Bit gesetzt sein, so erhält man bei +, unter Umständen, eine ungültige oder, schlimmer noch, unerwünschte Bitmaske. Bei or kann das nicht passieren.
Delphi-Quellcode:
const
FileAttr = faReadOnly or faHidden or faArchive;
Zweitens:
Das hier:
if SFPath[Length(SFPath)]<>'\' then SFPath := SFPath+'\';
kann schief gehen, wenn die Länge von SFPath gleich 0 ist.
Besser wäre die Verwendung von IncludeTrailingPathDelimiter oder IncludeTrailingBackslash.
Drittens:
Zumindest beim ersten erfolgreich ausgeführten FindFirst fehlt das zugehörige FindClose.
Ausserdem fehlen jeweils die Resourcenschutzblöcke (try/finally)
Delphi-Quellcode:
if FindFirst ... = 0 then begin
try
finally
FindClose...
end;
end;
Viertens:
Diese Prüfung:
(Search.name[1]<>'.')
ist schlicht falsch, da Datei und Verzeichnisnamen mit einem Punkt beginnen dürfen.
Es müssen explizit die Namen . und .. geprüft werden.
(Search.Name <> '.') and (Search.Name <> '..')