Delphi-PRAXiS
Seite 3 von 3     123   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Dateigröße formatieren? (https://www.delphipraxis.net/57728-dateigroesse-formatieren.html)

dahead 5. Dez 2005 10:49

Re: Dateigröße formatieren?
 
Zitat:

Zitat von Khabarakh
Viel zu lang :mrgreen: .
Delphi-Quellcode:
function FileSizeToStr(const ASize: Int64): string;
const
  Units: Array[0..8] of string = ('Byte', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB');
var
  Index: Integer;
begin
  Assert(ASize >= 0);
  Index := Trunc(ln(ASize) / ln(2) / 10); // <-- hier
  Result := Format('%.2f %s', [ASize / (1 shl (Index * 10)), Units[Index]]);
end;
*scnr*

Bei meinem Delphi 7 kommt leider in der Idx Spalte ein Fehler inkompatible Typen. Ln erwartet einen Wert vom Typ Real.

dahead 6. Dez 2005 13:07

Re: Dateigröße formatieren?
 
Funktioniert der obige Code bei euch etwa?

ichbins 6. Dez 2005 14:07

Re: Dateigröße formatieren?
 
Bei mir läuft alles Super.

[OT]Der Wikipedia-Artikel (oben verlinkt) schreibt für Kilobytes die Einheit KiB vor :mrgreen:[/OT]

übrigens ist es sinnlos, so große Einheiten anzugeben, da ein int64 nur bis zu 2^64 geht, d.h. Exabytes (bis 2^69,999) würden vollkommen ausreichen.

Wenn dein Compiler einen Real erwartet, gib ihm doch einen. Mach aus 2 -> 2.0 und teile asize durch 1.0

Khabarakh 6. Dez 2005 15:02

Re: Dateigröße formatieren?
 
Die System-Routinen scheinen wohl bis D2005 ein Problem mit Int64 zu haben, nicht einmal ein explicit Cast funktioniert. Über eine Real-Variable (bzw. gleich als Parameter) oder eine nicht-ASM Funktion funktioniert die Routine aber auch mit meinem Delphi 6:
Delphi-Quellcode:
Index := Trunc(Math.LogN(2, ASize) / 10);
Zitat:

Zitat von ichbins
übrigens ist es sinnlos, so große Einheiten anzugeben, da ein int64 nur bis zu 2^64 geht, d.h. Exabytes (bis 2^69,999) würden vollkommen ausreichen.

Der Kommentar im Code ist nicht zufällig genau so eingerückt, wie er oben steht.
Zitat:

Zitat von ichbins
[OT]Der Wikipedia-Artikel (oben verlinkt) schreibt für Kilobytes die Einheit KiB vor :mrgreen:[/OT]

Und wer hält sich daran :wink: ? Bevor ich den User komplett verwirre, gebe ich lieber eine streng genommen falsche Einheit aus.

ichbins 6. Dez 2005 15:08

Re: Dateigröße formatieren?
 
Da steht aber nur unwahrscheinlich ;)

Eigentlich gehört ein unmöglich hin. Unwahrscheinlich wird es nämlich schon etwas früher.

dahead 6. Dez 2005 16:33

Re: Dateigröße formatieren?
 
Zitat:

Zitat von Khabarakh
Die System-Routinen scheinen wohl bis D2005 ein Problem mit Int64 zu haben, nicht einmal ein explicit Cast funktioniert. Über eine Real-Variable (bzw. gleich als Parameter) oder eine nicht-ASM Funktion funktioniert die Routine aber auch mit meinem Delphi 6:
Delphi-Quellcode:
Index := Trunc(Math.LogN(2, ASize) / 10);

ja, so klappt es bei mir auch. Danke!


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:34 Uhr.
Seite 3 von 3     123   

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-2025 by Thomas Breitkreuz