Zitat:
if (lSearchRecord.Attr <> faDirectory) then
Das ist mit ziemlicher Sicherheit falsch. Die Bedingung trifft ja nur dann zu, wenn das Attribut lediglich aus faDirectory besteht, aber nicht, wenn neben faDirectory noch andere Attribute enthalten sind. Daher würde ich die Abfrage ändern in
if ((lSearchRecord.Attr and faDirectory) <> faDirectory) then