![]() |
Dateigröße formatieren?
Hallo,
ich lasse mir die Größe einer Datei wie folgt ermitteln:
Delphi-Quellcode:
Ich möchte jetzt die Größenangabe formatieren (zb:Angabe in MB). Aber wie?
function CheckFileSize(aFilename: string): integer;
var f: file of Byte; size: Longint; begin AssignFile(f, aFilename); Reset(f); try size := FileSize(f); finally CloseFile(f); end; Result := size; end; procedure TForm1.Button1Click(Sender: TObject); begin Edit1.Text := (InttoStr(CheckFileSize(Edit2.Text))); end; |
Re: Dateigröße formatieren?
Mach eine Funktion FileSizeToStr:
Delphi-Quellcode:
Hoffe das hilft...
function FileSizeToStr(size:int64):string;
begin if size < 1024 then result := inttostr(size)+'Byte'; if (size > 1024) and (size < 1024*1024) then result := formatfloat('0.00',size/1024)+'KB'; if (size > 1024*1024) and (size < 1024*1024*1024) then result := formatfloat('0.00',size/1024/1024)+'MB'; if (size > 1024*1024*1024) then result := formatfloat('0.00',size/1024/1024/1024)+'GB'; end; |
Re: Dateigröße formatieren?
Und wie wäre der Aufruf in einer Procedur?
Habe Deine Funkion eingebaut. Leider gibt mir der Compiler folgende Fehlermeldung aus: Funktion benötigt Ereignistyp |
Re: Dateigröße formatieren?
Hallo,
da ist ein Fehler:
Delphi-Quellcode:
Gruß
function FileSizeToStr(size:int64): String; // <- das muss noch dazu
xaromz |
Re: Dateigröße formatieren?
Hai mlspider,
da ist ein kleiner Fehler in der Deklaration. Mach aus:
Code:
einfach
function FileSizeToStr(size:int64);
Code:
function FileSizeToStr(size:int64) : String;
|
Re: Dateigröße formatieren?
ich hab mir für diesen zweck das hier gebastelt (finde ich persönlich etwas übersichtlicher):
edit: gepostete funktion muss überarbeitet werden, daher entfernt. |
Re: Dateigröße formatieren?
Ein KB hat aber 1.024 Byte und nicht 1.000. ;)
|
Re: Dateigröße formatieren?
Beide Funktionen sind toll. Leider komme ich mit dem Aufruf innerhalb einer Procedur nicht klar, da Int64 und TCaption inkompatibel sind.
|
Re: Dateigröße formatieren?
Du musst den Integer erst in einen String konvertieren mit
![]() |
Re: Dateigröße formatieren?
Hallo Luckie,
das mache ich bereits:
Delphi-Quellcode:
Der Compiler schluckt das ganze nicht.
Edit1.Text := (InttoStr(FileSizeToStr(Edit2.Text)));
|
Re: Dateigröße formatieren?
Hallo,
da fehlt ein ![]() schreib mal
Delphi-Quellcode:
Gruß
Edit1.Text := FileSizeToStr(StrToInt(Edit2.Text));
xaromz //Edit: Fehler verbessert. |
Re: Dateigröße formatieren?
Delphi-Quellcode:
So passts:
Edit1.Text := (InttoStr(FileSizeToStr(Edit2.Text)));
Delphi-Quellcode:
Edit1.Text := FileSizeToStr(StrtoInt(Edit2.Text));
|
Re: Dateigröße formatieren?
@lucky :gruebel: :stupid:
Meine Funktion einfach so aufraufen:
Delphi-Quellcode:
Size ist ein integer. Edit2.Text ein String.
label1.caption := filesizetostr(size);
Mach es doch einfach so:
Delphi-Quellcode:
Noch ein Tipp um die Große abzufragen. Du nimmst da eine recht "altmodische" Methode.
label1.caption := filesizetostr(strtoint(edit2.text));
So ist es hoffentlich besser:
Delphi-Quellcode:
function CheckFileSize(aFilename: string): int64;
var fs:TFilestream; begin fs := TFileStream.Create(afilename,fmOpenRead ) Result := fs.size; fs.free; end; |
Re: Dateigröße formatieren?
Das ist doch schon ein String: FileSizeToStr!
|
Re: Dateigröße formatieren?
Ja, jetzt passt es. Danke an alle.
|
Re: Dateigröße formatieren?
Zitat:
Delphi-Quellcode:
*scnr*
function FileSizeToStr(const ASize: Int64): string;
const Units: Array[0..8] of string = ('Byte', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'); // Ab hier wird es unwahrscheinlich ^^ var Index: Integer; begin Assert(ASize >= 0); Index := Trunc(ln(ASize) / ln(2) / 10); Result := Format('%.2f %s', [ASize / (1 shl (Index * 10)), Units[Index]]); end; |
Re: Dateigröße formatieren?
Delphi-Quellcode:
Da ist eh ein Fehler drin ... ihr solltet mal darauf achten, was passiert, wenn size 1024 ist :zwinker:
function FileSizeToStr(size:int64):string;
begin if size < 1024 then result := inttostr(size)+'Byte'; if (size > 1024) and (size > 1024*1024) then result := formatfloat ... |
Re: Dateigröße formatieren?
Delphi-Quellcode:
OT: Was ist denn EB, ZB und YB ? :mrgreen:
function FileSizeToStr(const ASize: Int64): string;
const Units: Array[0..8] of string = ('Byte', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'); // Ab hier wird es unwahrscheinlich ^^ var Index: Integer; begin Assert(ASize >= 0); Index := Trunc(ln(ASize) / ln(2) / 10); Result := Format('%.2f %s', [ASize / (1 shl (Index * 10)), Units[Index]]); end; Ich kenne nur bis PetaByte :mrgreen: |
Re: Dateigröße formatieren?
Zitat:
![]() |
Re: Dateigröße formatieren?
Immer wieder nützlich!:mrgreen:
|
Re: Dateigröße formatieren?
Zitat:
|
Re: Dateigröße formatieren?
Funktioniert der obige Code bei euch etwa?
|
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 |
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:
|
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. |
Re: Dateigröße formatieren?
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:22 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-2025 by Thomas Breitkreuz