GetFileAttributes имеет БОЛЬШУЮ ОШИБКУ, чтобы увидеть его, попробуйте этот простой код:
ShowMessage(IntToStr(GetFileAttributes(PChar('C:\.MyNonExistantFile'))));
Это показывает, что GetFileAttributes возвращает 32 в десятичном виде (поскольку файл не существует, это ошибка, правильное возвращаемое значение должно быть -1).
Также вы можете попробовать это с:
CreateDir('C:\.Anything');
ShowMessage(IntToStr(GetFileAttributes(PChar('C:\.Anything\MyNonExistantFile.TXT'))));
Это связано с файлами и каталогами, начинающимися с символа точки (.).
Примечание: FileExists также возвращает true в этих ситуациях (а файл не существует).