🙌

C# (.NET)でバイト(Bytes)をKB, MB, GBに変換したい

2024/05/26に公開

C#あるある

ファイルサイズをバイトで取得する方法は用意されているがそれを表示するときに実装方法で少し困る。そもそもなぜ標準実装が用意されていなのか。

エレガントな実装方法

Stackoverflowのスレッドを見ていたら美しい実装を見つけた。自分で考えた訳でもないので厚顔無恥にもほどがあるが、「結局どう実装するのが良いんだ」と悩むことのないようにZenn上に再掲することにした。

public static string FormatFileSize(long bytes)
{
    var unit = 1024;
    if (bytes < unit) { return $"{bytes} B"; }

    var exp = (int)(Math.Log(bytes) / Math.Log(unit));
    return $"{bytes / Math.Pow(unit, exp):F2} {("KMGTPE")[exp - 1]}B";
}

これを使うと、KBだろうがTBだろうが正しく表示される。桁数が気になるならばF2の部分を変えればよい。

Discussion