wie groß ist denn die Datei?
Delphi-Quellcode:
function GetFileSize2(const FileName: String): Int64;
var
H: THandle;
D: TWIN32FindDataW;
begin
H := FindFirstFileW(PWideChar(FileName), D);
If H = INVALID_HANDLE_VALUE then exit; //GetLastError_auswerten;
result := (Int64(d.nFileSizeHigh)*(MAXDWORD + 1))+d.nFileSizeLow;
CloseHandle(H);
end;
PS: * und + sind etwas langsam/unoptimal
und bevor du versuchst einen Integer/Cardinal [d.nFileSizeHigh] (also 4 Byte) auf einen Int64 (8 Byte) zu erweitern, mußt die dessen Größe erstmal ändern (Int64)
Delphi-Quellcode:
Function GetFileSizeA(Const FileName: String): Int64;
Var FileNameW: WideString;
H: THandle;
D: TWIN32FindDataW;
Begin
Result := -1;
FileName := FileNameW;
H := FindFirstFileW(PWideChar(FileName), D);
If H = INVALID_HANDLE_VALUE Then Exit;
If D.dwFileAttributes and FILE_ATTRIBUTE_DIRECTORY = 0 Then
Result := (Int64(D.nFileSizeHigh) shl 32) or D.nFileSizeLow;
CloseHandle(H);
End;
oder
Delphi-Quellcode:
Function GetFileSizeA(Const FileName: String): Integer;
Var FileNameW: WideString;
H: THandle;
D: TWIN32FindDataW;
Begin
Result := -1;
FileName := FileNameW;
H := FindFirstFileW(PWideChar(FileName), D);
If H = INVALID_HANDLE_VALUE Then Exit;
If (D.dwFileAttributes and FILE_ATTRIBUTE_DIRECTORY = 0)
and (D.nFileSizeHigh = 0) and (D.nFileSizeLow < $80000000) Then
Result := D.nFileSizeLow;
CloseHandle(H);
End;
PSS: was micht wundert ist, daß bei PWideChar(FileName) nicht gemeckert wird, vonwegen AnsiString-PWideChar-Konvertierung