Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.053 Beiträge
 
Delphi 12 Athens
 
#21

Re: Dateigröße auf Netzlaufwerk ermitteln

  Alt 2. Dez 2007, 02:28
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
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat