C#
 Computer >> コンピューター >  >> プログラミング >> C#

C#でファイルサイズをKB・MB・GBなど人間が読みやすい形式に変換する方法

C#でファイルやフォルダを操作する場合、System.IO名前空間に用意されたクラスとメソッドを活用すると効率的です。本記事では、指定したフォルダ内のファイルを再帰的に取得し、そのサイズを「KB」「MB」「GB」といった人間が読みやすい単位に変換して表示する方法を解説します。

ディレクトリとファイルの一覧を取得する

サブディレクトリの一覧を取得するには、Directory.GetDirectoriesメソッドを使用します。このメソッドは、指定した検索パターンに一致するサブディレクトリの名前(パスを含む)を返し、オプションでさらに下位のサブディレクトリも検索できます。

ファイルの一覧を取得するには、Directory.GetFilesメソッドを使用します。指定した検索パターンに一致するすべてのファイル名(パスを含む)が返され、こちらもオプションでサブディレクトリを再帰的に検索できます。

ファイルサイズを取得する

ファイルのサイズを取得するには、FileInfoクラスのLengthプロパティを使用します。このプロパティは、ファイルのサイズをバイト単位(long型)で返します。

コード例

static void Main(string[] args) {
    string rootPath = @"C:\Users\Koushik\Desktop\TestFolder";
    var files = Directory.GetFiles(rootPath, "*.*", SearchOption.AllDirectories);

    foreach (string file in files) {
        long size = new FileInfo(file).Length / 1024;
        string humanKBSize = string.Format("{0} KB", size);
        string humanMBSize = string.Format("{0} MB", size / 1024);
        string humanGBSize = string.Format("{0} GB", size / 1024 / 1024);
        Console.WriteLine($"KB:{humanKBSize} MB:{humanMBSize} GB:{humanGBSize}");
    }
    Console.ReadLine();
}

このコードでは、SearchOption.AllDirectoriesを指定することで、ルートフォルダ配下のすべてのサブフォルダに含まれるファイルを再帰的に取得しています。FileInfo.Lengthで取得したバイト値を1024で除算することで、KB → MB → GB と段階的に単位を変換しています。なお、整数除算では小数点以下が切り捨てられるため、端数は切り捨てられて表示される点に注意してください。

出力結果

KB:22 KB MB:0 MB GB:0 GB
KB:0 KB MB:2 MB GB:0 GB
KB:0 KB MB:0 MB GB:1 GB
KB:0 KB MB:0 MB GB:1 GB
KB:0 KB MB:0 MB GB:1 GB
KB:0 KB MB:0 MB GB:1 GB

応用:単位を自動選択する汎用メソッド

上記の例では3種類の単位を同時に表示していますが、実際のアプリケーションでは、サイズに応じて最適な単位を1つだけ表示するほうが読みやすくなります。以下は、そのための汎用的なヘルパーメソッドの例です。

static string FormatFileSize(long bytes) {
    string[] units = { "B", "KB", "MB", "GB", "TB" };
    double size = bytes;
    int unitIndex = 0;

    while (size >= 1024 && unitIndex < units.Length - 1) {
        size /= 1024;
        unitIndex++;
    }
    return $"{size:0.##} {units[unitIndex]}";
}

このメソッドを使用すれば、「1.5 MB」のように、ファイルサイズに合わせて自動的に適切な単位が選択された文字列を取得できます。フォルダ内の全ファイルサイズの合計表示や、エクスプローラー風のファイル一覧画面を作成する際にも活用できるので、ぜひ参考にしてください。

  1. Python 3のtkinterでファイルダイアログから文字列(ファイルパス)を取得する方法

    tkinterアプリケーションでファイルシステムを操作したい場合には、filedialogモジュールを利用します。このモジュールは、システム上のファイルを扱うための仕組みを提供しており、さまざまな種類のファイルダイアログを簡単に作成できる組み込み関数を多数備えています。用途に応じて任意のfiledialog関数を選択し、アプリケーションに組み込むことが可能です。中でも最もよく使われているのがfiledialog.askopenfilename()です。この関数を呼び出すと、ユーザーにファイルを開かせるためのダイアログが表示され、選択されたファイルのパスを文字列として受け取ることができます。サン

  2. Pythonで文字列のサイズ(長さ)を取得する方法を解説

    Pythonでは、リストやタプル、文字列などの複合オブジェクトの長さを取得できる組み込み関数 len() が用意されています。文字列の長さを知りたい場合は、その文字列をそのまま len() に渡すだけでOKです。len() を使った文字列の長さ取得サンプルコードprint(len(Hello World!))実行結果12この例では、「Hello World!」に含まれる12文字(スペースも1文字としてカウント)が返されています。日本語のようなマルチバイト文字の場合でも、len() は「文字数」を返す点に注意してください。バイト単位でサイズを取得したい場合:sys.getsizeof()文字数で