Durch das FileExists rufst du so zwei mal hintereinander FindFirstFile für dieselbe Datei auf - du musst doch in GetFileSize nach dem FindFirstFile einfach nur noch auf FILE_ATTRIBUTE_DIRECTORY testen.
Delphi-Quellcode:
function GetFileSize(szFile: PChar): Int64;
var
fFile : THandle;
wfd : TWIN32FINDDATA;
begin
result := -1;
fFile := FindFirstfile(pchar(szFile), wfd);
if fFile = INVALID_HANDLE_VALUE then exit;
if (wfd.dwFileAttributes and FILE_ATTRIBUTE_DIRECTORY) <> 0 then exit;
result := (wfd.nFileSizeHigh * (Int64(MAXDWORD) + 1)) + wfd.nFileSizeLow;
windows.FindClose(fFile);
end;