this slowpoke moves

Get File size

Die exakte Größe einer Datei zu bestimmen ist spezifisch; es kommt auf die Datei selbst und auf die Größe der Datei an, um die genaue Größe ermittelt zu bekommen.

Hier sind vier Beispiele, die sehr genau sind, doch die genauste Berechnung ist das dritte Beispiel, mit der Quad Part Berechnung.
Beispiel 1 :
function Get_File_Size1(sFileToExamine: string; bInKBytes: Boolean): string;
{
 Aus irgendeinem Grund werden beide Methoden zum Ermitteln der Dateigröße zurückgegeben
 eine Dateigröße, die etwas größer ist als die Windows-Datei
 Explorer-Berichte​.
}
var
  FileHandle: THandle;
  FileSize: LongWord;
  d1: Double;
  i1: Int64;
begin
  //a- Get file size
  FileHandle := CreateFile(PChar(sFileToExamine),
    GENERIC_READ,
    0, {exclusive}
    nil, {security}
    OPEN_EXISTING,
    FILE_ATTRIBUTE_NORMAL,
    0);
  FileSize   := GetFileSize(FileHandle, nil);
  Result     := IntToStr(FileSize);
  CloseHandle(FileHandle);
  //a- optionally report back in Kbytes
  if bInKbytes = True then
  begin
    if Length(Result) > 3 then
    begin
      Insert('.', Result, Length(Result) - 2);
      d1     := StrToFloat(Result);
      Result := IntToStr(round(d1)) + 'KB';
    end
    else
      Result := '1KB';
  end;
end;
Beispiel 2 :
function Get_File_Size2(sFileToExamine: string; bInKBytes: Boolean): string;
var
  SearchRec: TSearchRec;
  sgPath: string;
  inRetval, I1: Integer;
begin
  sgPath := ExpandFileName(sFileToExamine);
  try
    inRetval := FindFirst(ExpandFileName(sFileToExamine), faAnyFile, SearchRec);
    if inRetval = 0 then
      I1 := SearchRec.Size
    else
      I1 := -1;
  finally
    SysUtils.FindClose(SearchRec);
  end;
  Result := IntToStr(I1);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  if OpenDialog1.Execute then
    label1.Caption := Get_File_Size(Opendialog1.FileName, True);
end;
Beispiel 3 :
function Get_File_Size3(const FileName: string): TULargeInteger;
var
  Find: THandle;
  Data: TWin32FindData;
begin
  Result.QuadPart := -1;
  Find := FindFirstFile(PChar(FileName), Data);
  if (Find <> INVALID_HANDLE_VALUE) then
  begin
    Result.LowPart  := Data.nFileSizeLow;
    Result.HighPart := Data.nFileSizeHigh;
    Windows.FindClose(Find);
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  if (OpenDialog1.Execute) then
    ShowMessage(IntToStr(Get_File_Size3(OpenDialog1.FileName).QuadPart));
    // HIER KANN DER QUADPART GETEILT WERDEN UM GRÖßERE EINHEITEN ZU BEKOMEN BEISPIEL : .QuadPart div 100000 für Kilo Byte
end;
Beispiel 4 :
function Get_File_Size4(const S: string): Int64;
var
  FD: TWin32FindData;
  FH: THandle;
begin
  FH := FindFirstFile(PChar(S), FD);
  if FH = INVALID_HANDLE_VALUE then Result := 0
  else
    try
      Result := FD.nFileSizeHigh;
      Result := Result shl 32;
      Result := Result + FD.nFileSizeLow;
    finally
      CloseHandle(FH);
    end;
end;

Keine Kommentare:

Kommentar veröffentlichen

Beliebte Posts

Translate