Moin Chris,
da FindFirst einen Windows Fehlercode zurückgibt, oder 0 bei Erfolg, und FindFirstFile ein SearchHandle (INVALID_HANDLE_VALUE bei Misserfolg), ist es ja nur logsich, dass die Werte nicht Stimmen.
Die würden im Fehlerfalle stimmen, wenn Du sie dann mit GetLastError ermittelst.
Du musst also unmittelbar nach FindFirstFile das
Handle prüfen. Ist es ungültig hat's nicht geklappt und FileClose ist dann auch nicht notwendig. Dafür kannst Du dann mit GetLastError prüfen, was denn nun genau schiefgegangen ist.
Wenn Dich das nicht weiter interessiert, kannst Du die gesamte folgende Prüfung auch weglassen (ausser eben Prüfung des Handles).
PS: Das {$I-}/{$I+} kannst Du auch streichen: die APIs lösen keine Pascal I/O-Exceptions aus.