Dies ist eine einfache (glaube ich).Delphi-Funktion zur Anzeige der Anzahl der Bytes als Windows
Gibt es ein in Funktion eingebautes System oder eine von Delphi erstellte Funktion, die eine Anzahl von Bytes (z. B. eine Dateigröße) anzeigt, wie Windows im Feld Eigenschaften einer Datei angezeigt wird?
z.B. Dies ist, wie Windows Eigenschaftenbox verschiedene Größen zeigt:
539 bytes (539 bytes)
35.1 KB (35,974 bytes)
317 MB (332,531,365 bytes)
2.07 GB (2,224,617,077 bytes)
Die Anzeige über die Verwendung von Bytes ist smart, KB, MB oder GB, und zeigt nur drei signifikante Stellen für das KB, MB und GB. Dann folgt die Anzeige der genauen Anzahl der Bytes in Klammern mit Kommas, die die Tausender trennen. Es ist ein sehr schönes Display, gut durchdacht.
Kennt jemand eine solche Funktion?
Edit: Ich bin sehr überrascht, dass es für diese keine Funktion war.
Vielen Dank für Ihre hilfreichen Ideen. Ich habe mir das ausgedacht, was zu funktionieren scheint:
function BytesToDisplay(A:int64): string;
var
A1, A2, A3: double;
begin
A1 := A/1024;
A2 := A1/1024;
A3 := A2/1024;
if A1 < 1 then Result := floattostrf(A, ffNumber, 15, 0) + ' bytes'
else if A1 < 10 then Result := floattostrf(A1, ffNumber, 15, 2) + ' KB'
else if A1 < 100 then Result := floattostrf(A1, ffNumber, 15, 1) + ' KB'
else if A2 < 1 then Result := floattostrf(A1, ffNumber, 15, 0) + ' KB'
else if A2 < 10 then Result := floattostrf(A2, ffNumber, 15, 2) + ' MB'
else if A2 < 100 then Result := floattostrf(A2, ffNumber, 15, 1) + ' MB'
else if A3 < 1 then Result := floattostrf(A2, ffNumber, 15, 0) + ' MB'
else if A3 < 10 then Result := floattostrf(A3, ffNumber, 15, 2) + ' GB'
else if A3 < 100 then Result := floattostrf(A3, ffNumber, 15, 1) + ' GB'
else Result := floattostrf(A3, ffNumber, 15, 0) + ' GB';
Result := Result + ' (' + floattostrf(A, ffNumber, 15, 0) + ' bytes)';
end;
Das ist wahrscheinlich gut genug, aber gibt es etwas besseres?
StrFormatByteSize64 scheint zu sein, was Windows für den ersten Teil verwendet. Aber wenn man diese Funktion von Delphi aufruft, muss man einen Puffer einrichten - nicht hübsch. Für den zweiten Teil scheint floattostrf besser zu funktionieren als die Lösungen in Ihrem Link. – lkessler
Da Sie eine Vorstellung davon haben, wie lang die Ausgabe sein kann, verwenden Sie ein gepacktes Array [1..n] von char für den Puffer. Übergeben Sie @CharArray [1] als Zeiger. –
Ausgezeichneter Tipp! (StrFormatByteSizeW) –