![]() |
filesize summieren und von byte nach Mb rechnen
Hallöle ..
Ich weiß das.. 8 Bit = 1 Byte 1024 byte = 1KB 1024KB = 1Mb sind, aber nun habe ich heute im Netz gelesen, das man mit Delphi nicht mit diesen zahlen rechnen soll, sondern 1Kb = 1000Byte nehmen soll, warum auch immer?! nun zu dem eigentlichen problem.
Delphi-Quellcode:
// Result = byte function GetFileSize(FileName: String): Integer; var SR: TSearchRec; begin if FindFirst(Filename, faAnyFile, SR) = 0 then begin Result := SR.Size; end else begin Result := -1; end; FindClose(SR); end; // Complete Bar enthällt nicht die tatsächliche Grösse aller in der SFV File befindlichen dateien Function Status(Wert: Integer; FileSize: Integer): String; Var I: Integer; Begin If Wert = sfvfile.count then Result := '[AA] - ( ' + IntToStr(sfvfile.count) + 'F ' + IntToStr(FileSize div 1024 div 1024) + 'M - COMPLETE ) - [AA]' else Begin Result := '['; for i := 0 to (((Wert * sfvfile.count) div 100) div 10)-1 do Result := Result + '#'; for i := (((Wert * sfvfile.count) div 100) div 10)+1 to 10 do Result := Result + '-'; Result := Result + '] - ' + IntToStr((Wert * sfvfile.count) div 100) + '% Complete - [AA]'; end; OldStatus := Result; End; // und so zähle ich die filesize hoch ... var FSize : Integer; dir : String; // enthällt den Pfad zur Datei filen : String; // der Dateinamen begin ... FSize := FSize + GetFileSize(dir + filen); end; Als beispiel habe ich einen ordner mit Gesammtgrösse der Dateien von 4,6GB genommen. Als Ergebniss in dem Statusbalken bekomme ich aber 52MB raus. Wo liegt das Problem bzw was hab ich da falsch gemacht? |
Re: filesize summieren und von byte nach Mb rechnen
Ein Integer geht nur bis 2147483647 Byte = 2097152 KByte = 2048 MB = 2 GB
Deshalb würde ich Int64 verwenden, der geht bis 2^63 = 8589934592 GB = 8388608 TB. |
Re: filesize summieren und von byte nach Mb rechnen
Oh Ok! Das habe ich überhaupt nicht beachtet *g*
Vielen dank |
Re: filesize summieren und von byte nach Mb rechnen
Moin Sharkx,
Zitat:
Der einzige Grund, den ich mir denken kann, liegt nicht in Delphi begründet, sondern darin, dass viele Hersteller bei GB nicht 1024^3 sondern 1000^3 rechnen (z.B. bei der Grössenangabe von DVD-R), so dass bei mancher Anwendung die 1000 Sinn macht. |
Re: filesize summieren und von byte nach Mb rechnen
Ich weiß nicht mehr genau auf welcher Seite das war. Ich hatte nach meiner lösung des problems gegoogelt und stoß da auf eine GetFileSize funktion die den wert gleich umrechnet. Da stand dieses dabei. Aber schlag mich tot .. ich weiß die URL nicht mehr :/
|
Re: filesize summieren und von byte nach Mb rechnen
Hi,
wie rufst due denn
Delphi-Quellcode:
auf?
Function Status(Wert: Integer; FileSize: Integer): String;
|
Re: filesize summieren und von byte nach Mb rechnen
Delphi-Quellcode:
Habs aber danke scp hinbekommen. Wenn der Wert über dem zulässigen Integer wert ist, kanns nich gut gehen ;)
ForceDirectories(dir + Status(FileOK, FSize));
|
Re: filesize summieren und von byte nach Mb rechnen
hab noch was anderes für dich:
Freigabe von SearchRec berichtigt (siehe Beispiel in der OH):
Delphi-Quellcode:
Ein bissl Codeoptinierung:
Function GetFileSize(FileName: String): Integer;
Var SR: TSearchRec; Begin If FindFirst(Filename, faAnyFile, SR) = 0 Then Begin Result := SR.Size; {} FindClose(SR); End Else Result := -1; End;
Delphi-Quellcode:
Function Status(Wert: Integer; FileSize: Int64): String;
Var I: Integer; Begin If Wert = sfvfile.count Then {} Result := '[AA] - ( ' + IntToStr(sfvfile.count) + 'F ' + IntToStr(FileSize shr 20) + 'M - COMPLETE ) - [AA]' Else Begin Result := '['; {} For I := 1 to ((Wert * sfvfile.count) div 1000) do Result := Result + '#'; {} For I := ((Wert * sfvfile.count) div 1000) + 1 to 10 do Result := Result + '-'; {} Result := Result + '] - ' + IntToStr((Wert * sfvfile.count) div 100) + '% Complete - [AA]'; End; OldStatus := Result; End;
Delphi-Quellcode:
{10 Bit = 1024}
X div 1024 div 1024 = X shr 20 {arbeitet schneller} |
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:25 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