DOBON.NET

フォルダのサイズを取得する

あるフォルダ以下のすべてのファイルの合計サイズを取得する方法を紹介します。

下記のメソッド(GetDirectorySizeメソッド)は、DirectoryInfoオブジェクトで対象フォルダを指定し、サイズを取得しています。なお、ファイル数、サブフォルダ数が多いと、かなり時間がかかります。

VB.NET
コードを隠すコードを選択
'Imports System.IO
'がソースファイルの一番上に書かれているものとする

''' <summary>
''' フォルダのサイズを取得する
''' </summary>
''' <param name="dirInfo">サイズを取得するフォルダ</param>
''' <returns>フォルダのサイズ(バイト)</returns>
Public Shared Function GetDirectorySize( _
        ByVal dirInfo As DirectoryInfo) As Long
    Dim size As Long = 0

    'フォルダ内の全ファイルの合計サイズを計算する
    Dim fi As FileInfo
    For Each fi In dirInfo.GetFiles()
        size += fi.Length
    Next fi

    'サブフォルダのサイズを合計していく
    Dim di As DirectoryInfo
    For Each di In dirInfo.GetDirectories()
        size += GetDirectorySize(di)
    Next di

    '結果を返す
    Return size
End Function
C#
コードを隠すコードを選択
//using System.IO;
//がソースファイルの一番上に書かれているものとする

/// <summary>
/// フォルダのサイズを取得する
/// </summary>
/// <param name="dirInfo">サイズを取得するフォルダ</param>
/// <returns>フォルダのサイズ(バイト)</returns>
public static long GetDirectorySize(DirectoryInfo dirInfo)
{
    long size = 0;

    //フォルダ内の全ファイルの合計サイズを計算する
    foreach (FileInfo fi in dirInfo.GetFiles())
        size += fi.Length;

    //サブフォルダのサイズを合計していく
    foreach (DirectoryInfo di in dirInfo.GetDirectories())
        size += GetDirectorySize(di);

    //結果を返す
    return size;
}

使用法は、次のような感じです。

VB.NET
コードを隠すコードを選択
'"C:\My Documents"のサイズを取得する
Dim di As New System.IO.DirectoryInfo("C:\My Documents")
Dim dirsize As Long = GetDirectorySize(di)
C#
コードを隠すコードを選択
//"C:\My Documents"のサイズを取得する
System.IO.DirectoryInfo di =
    new System.IO.DirectoryInfo("C:\\My Documents");
long dirsize = GetDirectorySize(di);

注意:この記事では、基本的な事柄の説明が省略されているかもしれません。初心者の方は、特に以下の点にご注意ください。

  • コードの先頭に記述されている「Imports ??? がソースファイルの一番上に書かれているものとする」(C#では、「using ???; がソースファイルの一番上に書かれているものとする」)の意味が分からないという方は、こちらをご覧ください。
  • Windows Vista以降でUACが有効になっていると、ファイルへの書き込みに失敗する可能性があります。詳しくは、こちらをご覧ください。
  • .NET Tipsをご利用いただく際は、注意事項をお守りください。
共有する

この記事への評価

この記事へのコメント

この記事に関するコメントを投稿するには、下のボタンをクリックしてください。投稿フォームへ移動します。通常のご質問、ご意見等は掲示板へご投稿ください。