あるフォルダ以下のすべてのファイルの合計サイズを取得する方法を紹介します。
下記のメソッド(GetDirectorySizeメソッド)は、DirectoryInfoオブジェクトで対象フォルダを指定し、サイズを取得しています。なお、ファイル数、サブフォルダ数が多いと、かなり時間がかかります。
'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
//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; }
使用法は、次のような感じです。
'"C:\My Documents"のサイズを取得する Dim di As New System.IO.DirectoryInfo("C:\My Documents") Dim dirsize As Long = GetDirectorySize(di)
//"C:\My Documents"のサイズを取得する System.IO.DirectoryInfo di = new System.IO.DirectoryInfo("C:\\My Documents"); long dirsize = GetDirectorySize(di);