Zwei kleine Korrekturen:
1.) Falls die Datei nicht existiert, ist das Funktionsergebnis undefiniert.
2.) Das Schieben eines 32-Bit-Wertes um 32 Bits nach links löscht eigentlich nur den Wert.
Mein Vorschlag:
Delphi-Quellcode:
function FileSize(fn: TFileName): Int64;
var
sr: TSearchRec;
begin
if FindFirst(fn, faArchive, sr) = 0 then
begin
with sr.FindData do
Result := Int64(nFileSizeHigh) shl 32 + nFileSizeLow;
FindClose(sr);
end
else
Result := 0;
end;