![]() |
Re: Dateigröße als String ausgeben
Ich denke, mit den veralteten Pascal-Routinen dürfte es auch unter Linux mit Lazarus funktionieren (ungetestet).
|
Re: Dateigröße als String ausgeben
Ich hab die überarbeitete Version von DeddyH mit dem einwand von Lucki kombiniert. Dabei bin ich davon ausgegangen, dass die Methode von Lucki die Größe in Byte liefert. Wenns anders ist bitte schreit ;)
Delphi-Quellcode:
function GetFileSizeAsString(FileName: string; Use1024: Boolean = true): string;
const Sizes1024: array[0..7] of string = ('KiB','MiB','GiB','TiB','PiB','EiB','ZiB','YiB'); Sizes1000: array[0..7] of string = ('KB','MB','GB','TB','PB','EB','ZB','YB'); var Size: Extended; _Unit: integer; S: string; Divisor: Integer; fFile: THandle; wfd: TWin32FINDDATA; begin if not FileExists(FileName) then begin Result := 'FNE'; Exit; end; try fFile := FindFirstfile(PChar(FileName), wfd); if fFile = INVALID_HANDLE_VALUE then begin Result := 'ERR'; Exit; end; if Use1024 then Divisor := 1024 else Divisor := 1000; Size := ((wfd.nFileSizeHigh * (Int64(MAXDWORD) + 1)) + wfd.nFileSizeLow) / Divisor; // Size in Kib or KB windows.FindClose(fFile); _Unit := Low(Sizes1024); while (Size >= Divisor) and (_Unit < High(Sizes1024)) do begin Size := Size / Divisor; Inc(_Unit); end; if Use1024 then S := Sizes1024[_Unit] else S := Sizes1000[_Unit]; Result := Format('%.2f %s',[Size,S]); except Result := 'ERR'; end; end; |
Re: Dateigröße als String ausgeben
Dann nimm aber die Tippfehler noch raus.
Delphi-Quellcode:
wfd: TWin32FINDDATA;
... fFile := FindFirstfile(PChar(FileName), wfd); ... Size := ((wfd.nfileSizeHigh * (int64(MAXDWORD) + 1)) + wfd.nFileSizeLow) / Divisor; |
Re: Dateigröße als String ausgeben
Ich muss mal n wach macher trinken^^
aber der
Delphi-Quellcode:
is doch richtig. Die Klammen müssen da ja wegen dem "+" hin ;)
Size := ((wfd.nfileSizeHigh * (int64(MAXDWORD) + 1)) + wfd.nFileSizeLow) / Divisor;
|
Re: Dateigröße als String ausgeben
Du hattest aber
Zitat:
|
Re: Dateigröße als String ausgeben
mmh.. ich werd heute mal delphi ausmachen.. das wird eh nix mehr^^
|
Re: Dateigröße als String ausgeben
Vielleicht sollte man anstatt der Win32-API-Funktionen auch TFileStream verwenden. Dann läuft das ganze nämlich auch unter Linux und mit Dateigrößen > 2GB (Integer).
|
Re: Dateigröße als String ausgeben
Gute Idee.
Delphi-Quellcode:
[edit] den Filename-Parameter als const definiert. [/edit]
function GetFileSizeAsString(const FileName: string; Use1024: Boolean = true): string;
const Sizes1024: array[0..7] of string = ('KiB','MiB','GiB','TiB','PiB','EiB','ZiB','YiB'); Sizes1000: array[0..7] of string = ('KB','MB','GB','TB','PB','EB','ZB','YB'); var Size: Extended; _Unit: integer; S: string; Divisor: Integer; fStream: TFileStream; begin if not FileExists(FileName) then begin Result := 'FNE'; Exit; end; try if Use1024 then Divisor := 1024 else Divisor := 1000; fStream := TFileStream.Create(FileName,fmOpenRead or fmShareDenyNone); try Size := fStream.Size / Divisor; finally fStream.Free; end; _Unit := Low(Sizes1024); while (Size >= Divisor) and (_Unit < High(Sizes1024)) do begin Size := Size / Divisor; Inc(_Unit); end; if Use1024 then S := Sizes1024[_Unit] else S := Sizes1000[_Unit]; Result := Format('%.2f %s',[Size,S]); except Result := 'ERR'; end; end; |
Re: Dateigröße als String ausgeben
Welchen Datentyp verwenden neuere Delphi für TFileStream.Size? Mein leicht angegrautes D5 nur LongInt (also 2 GB max).
Rein theoretisch könnte auch ein Singe weit mehr als ein YB darstellen, oder? |
Re: Dateigröße als String ausgeben
Unter Delphi 2007 ist das ein Int64.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:21 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz