DirectoryExists macht intern ein: GetFileAttributes
und FileExists macht intern ein: FileAge welches wiederum ein FindFirstFile macht.
Letztendlich kannst du dich als für eine der beiden Varianten entscheiden. Also ob du Generell mit GetFileAttributes oder mit FindFirstFile arbeiten willst.
GetFileAttributes gibt dir im Fehlerfall DWORD(-1) zurück.
Du kannst eigentlich auch auf folgende Weise überprüfen ob eine Datei oder ein Verzeichnis existiert:
result := GetFileAttributes(PChar(AFileName)) <> DWORD(-1);
oder du prüfst eben mit FindFirstFile ob ein bestimmter Verzeichniseintrag vorhanden (wobei du das FindFirstFile-
Handle mit FindClose wieder schließen musst)