フォルダのサイズを返すFunction
フォルダのサイズを返すFunction
フォルダのサイズを返すFunctionを作ってみた。
FileSystemObjectを使う
だいぶ前に、Twitterでノンプロ研の某氏が言っていたのを思い出した。
たしかに、Windowsのエクスプローラーでフォルダを右クリックして「プロパティ」を表示しても、フォルダのサイズはわからなくはないのだが、ファイル数が多いときに異様に時間がかかる。
FileSystemObject
を使えば一瞬なのだ。
作ったコード
ちょっとだけ工夫をして、次のようなコードにした。
リスト1
Option Explicit Public Enum FiUnit fiByte fiKiloByte fiMegaByte fiGigaByte fiTeraByte End Enum Dim fsObj As Object Public Function GetFolderSize( _ ByVal a_FolderPath As String, _ Optional ByVal a_Unit As FiUnit = fiByte) As Variant Dim ret As Variant ret = 0 If fsObj Is Nothing Then Set fsObj = CreateObject("Scripting.FileSystemObject") Dim tgtFolder As Object 'パス間違いだったら-1を返してExit' If Not fsObj.FolderExists(a_FolderPath) Then ret = -1: GoTo ReturnValue Set tgtFolder = fsObj.GetFolder(a_FolderPath) ret = tgtFolder.Size ret = ret / (1024 ^ a_Unit) '……(*)' ReturnValue: GetFolderSize = ret End Function
第2引数で、自作の列挙体を指定できるようにした。
んで、たとえばfiKiloByte
が渡されたら、fiKiloByte
の実体は2
なので、Scripting.Folder
オブジェクトのSize
プロパティが返した値を1024 ^ 2
で割ることになり、キロバイト単位になる。
使ってみる
このFunctionを使って、私のSSD内のMETALLICA
フォルダのサイズを表示してみた。
Byte単位とGigaByte単位で表示させてみた結果が、
これ。(英語が変だったら教えろえてください。)
エクスプローラの「プロパティ」で表示させてみた結果は、
これ。
当たり前だけど、完全一致。
おわりに
FileSystemObject
って、便利だね。