Moin Dash,
diese Zeile
if (SR.Attr = faDirectory) and
muss so
if ((SR.Attr and faDirectory) <> 0) and
aussehen.
Auch ein Directory kann mehr als ein Attribut haben, und wenn das der Fall ist, klappt der Vergleich mit = nicht mehr, um ein Verzeichnis zu erkennen.
[EDIT]
Ausserdem sollte man Bitmasken, niemals mit + und - bearbeiten
if FindFirst(Directory + Mask, faAnyFile - faDirectory, SR) = 0 then try
auch wenn das in diesem Falle sogar funktionieren würde, sollte es besser
if FindFirst(Directory + Mask, faAnyFile AND NOT faDirectory, SR) = 0 then try
heissen. Hier hat übrigens das Beispiel zu FindFirst in der Delphi-Hilfe auch einen Fehler, da hier die Attribute mit + verknüpft werden (richtig wäre OR).
Hier hatte ich das schon einmal ausführlich erklärt.
Da FindFirst sich so gut wie nicht um den übergebenen Attributwert kümmert, wäre es sicherer es so zu schreiben:
Delphi-Quellcode:
if FindFirst(Directory + Mask, faAnyFile, SR) = 0 then try
repeat
if (sr.Attr and faDirectory) = 0 then List.Add(Directory + SR.Name)
until FindNext(SR) <> 0;
[/EDIT]