Hay dos problemas en tu código.
El primero es fácil detectar; está en la línea donde detectas si es o no un directorio:
if sr.Attr = faDirectory then
Debería ser:
if (sr.Attr and faDirectory) = faDirectory then
El segundo problema no estoy muy seguro a qué se debe aunque sé como evitarlo. Me parece que hay algo mal con la implementación que hace Delphi en cuanto a los atributos de archivos; creo que no incluye todos de manera que hay archivos que se pierden en la línea:
if ((sr.Attr and FileAttrs) = sr.Attr) and (sr.Name <> '.') and (sr.Name <> '..') then
por la primera condición. Pareciera que faAnyFile realmente no incluye a todos los posibles atributos.
Si quitas esa condición:
((sr.Attr and FileAttrs) = sr.Attr)
todo trabaja bien. Lo digo porque a mi me ocasionó los mismos problemas que a tí aún corrigiendo el primer problema.
Habrá que investigarle más. En el caso explícito que mencionas no hay diferencia ya que de cualquier forma estás buscando todo tipo de archivos por lo que la condición no afecta.
// Saludos
|