To jest proste (myślę).Funkcja Delphi do wyświetlania liczby bajtów jako Windows Czy
Czy istnieje funkcja wbudowana w system lub funkcja utworzona przez kogoś, którą można wywołać z Delphi, która wyświetli liczbę bajtów (np. Rozmiar pliku), sposób wyświetlania w oknie właściwości pliku?
np. To jest jak pudełko nieruchomość Windows wyświetla różne rozmiary:
539 bytes (539 bytes)
35.1 KB (35,974 bytes)
317 MB (332,531,365 bytes)
2.07 GB (2,224,617,077 bytes)
Wyświetlacz jest mądry na temat korzystania bajtów, KB, MB lub GB, i pokazuje tylko 3 cyfr znaczących dla KB, MB i GB. Wynika z tego, że wyświetlając dokładną liczbę bajtów w nawiasach, przecinkiem są tysiące. To bardzo fajny wyświetlacz, dobrze przemyślany.
Czy ktoś wie o takiej funkcji?
Edytuj: Jestem bardzo zaskoczony, że nie było w tym żadnej funkcji.
Dzięki za pomocne pomysły. Wymyśliłem to, co wydaje się działać:
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;
To chyba wystarczająco dobrze, ale czy jest coś lepszego?
StrFormatByteSize64 wydaje się być tym, czego Windows używa w pierwszej części. Ale wywołanie tej funkcji z Delphi wymaga ustawienia bufora - nie ładnego. Dla drugiej części, floattostrf wydaje się działać lepiej niż rozwiązania w twoim linku. – lkessler
jak masz pojęcie, jak długo może być wyjście, użyj spakowanej tablicy [1..n] char dla bufora. Przeprowadź @CharArray [1] jako wskaźnik. –
Doskonała wskazówka! (StrFormatByteSizeW) –