Zitat von
Luckie:
Sieht bei mir so aus:
Delphi-Quellcode:
function GetFileSize(Filename: String): Int64;
var
fFile : THandle;
wfd : TWIN32FINDDATA;
begin
result := -1;
if not FileExists(Filename) then
exit;
fFile := FindFirstfile(pchar(Filename), wfd);
if fFile = INVALID_HANDLE_VALUE then
exit;
result := (wfd.nFileSizeHigh * (Int64(MAXDWORD) + 1)) + wfd.nFileSizeLow;
windows.FindClose(fFile);
end;
Au, wo hast du denn diese Funktion her ?
Das mit dem Multiplizieren ((wfd.nFileSizeHigh * (Int64(MAXDWORD) + 1)) löst bei mir "schlechte Gefühle" aus.
Ich glaube die
VCL bzw. der Compiler kann gar keine Multiplikationen der Bauart
64bit * 32Bit = 64bit
ausführen.
Delphi-Quellcode:
function FileGetSize(const FileName: string): Int64; // kopiert aus der JCL
var
SearchRec: TSearchRec;
OldMode: Cardinal;
Size: TULargeInteger;
begin
Result := -1;
OldMode := SetErrorMode(SEM_FAILCRITICALERRORS);
try
if FindFirst(FileName, faAnyFile, SearchRec) = 0 then
begin
Size.LowPart := SearchRec.FindData.nFileSizeLow;
Size.HighPart := SearchRec.FindData.nFileSizeHigh;
Result := Size.QuadPart;
SysUtils.FindClose(SearchRec);
end;
finally
SetErrorMode(OldMode);
end;
end;