これは単純なものです(私は思う)。Windowsのようにバイト数を表示するDelphi関数
システム組み込み関数、またはファイルのプロパティボックスにWindowsが表示する方法など、バイト数(例:ファイルサイズ)を表示する、Delphiから呼び出すことのできる関数を作成しましたか?
539 bytes (539 bytes)
35.1 KB (35,974 bytes)
317 MB (332,531,365 bytes)
2.07 GB (2,224,617,077 bytes)
ディスプレイはバイト、KB、MBまたはGBの使用についてスマートで、KB、MBやGBのための唯一の3桁を示しています。これは、Windowsのプロパティボックスには、様々なサイズを表示する方法です。次に、正確なバイト数をカッコで囲んでカンマで区切って表示します。これは非常に素晴らしいディスプレイで、よく考えられています。
誰もそのような機能を知っていますか?
編集:これには機能がないと非常に驚いています。
ご協力いただきありがとうございます。私は仕事に思われる、これで作ってみた:
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;
は、これはおそらく十分ですが、より良いものはありますか?
StrFormatByteSize64は、Windowsが最初の部分に使用しているようです。しかし、Delphiからその関数を呼び出すにはバッファーを設定する必要があります。 2番目の部分では、floattostrfはあなたのリンクのソリューションよりもうまくいくようです。 – lkessler
あなたは出力がどれくらいの長さでよいかを知っているので、バッファのcharのpacked array [1..n]を使用してください。 @CharArray [1]をポインタとして渡します。 –
優秀な先端! (StrFormatByteSizeW) –