はじめまして。
データバックアップのアプリを作成しております。
複数指定したフォルダのファイル容量を算出したいのですが、
何かよい方法はないでしょうか?
とりあえずわたしの知ってる方法はこれだけです。
http://member.nifty.ne.jp/aya/wsh/
これで出来ますよ。
Dim objFileSystem As Object
Dim objFolder As Object
Set objFileSystem = CreateObject("Scripting.FileSystemObject")
Set objFolder = objFileSystem.GetFolder("C:\WINNT")
Debug.Print "App.Pathフォルダのサイズ:"; _
Format(objFolder.Size, "0,0"); _
" Byte"
' オブジェクトを解放
Set objFileSystem = Nothing
Set objFolder = Nothing
すいませんDebug.Printのコメント間違ってます。
"App.Pathフォルダのサイズ:"
↓
"WINNTフォルダのサイズ:"
でした。
まあ なんて恥ずかしい。
レスが早くてうれしいです。
たかみちえさん、okuさん、ありがとうございました。
残念ながら、この方法で得られるのはファイルの実バイト数の総和です。
たとえば、あるフォルダに1バイトのファイルが10個あれば10と表示されます。
しかしながら、Windows/DOSではHDDはクラスタ単位で管理されますから、
HDD上の占有サイズはこれと異なってきます。
1バイトのファイル10個の場合、クラスタサイズが4096バイトなら、
占有サイズは40960バイトになります。
この「クラスタギャップ」は小さいファイルがたくさんあるほど
大きくなりますから、バックアップ容量の計算には注意が必要です。
正確に出したければ、ファイルサイズをクラスタサイズで割り、
小数点以下を切り上げた整数にクラスタサイズを掛けたものを
占有ファイルサイズとし、フォルダ内の占有ファイルサイズの総和を
フォルダサイズとします。
ついでに,NTFSにはハードリンクやらReparse Pointやらという機能が……。
ハードリンクされたファイルが存在した場合,それを認識しないと正しいサイズが算出できません。
それをどうバックアップ・リストアするかはソフトウェア次第ですが,
リストア時にハードリンクされたファイルがリンクしていないのは問題になりますよね……。
選択された全てのフォルダの中にあるファイルを洗い出して
容量を取得・足していく方法しかどうも思いつきません…
あとはWindowsのプロパティ表示とか。
違うこと言っていたらごめんなさい。
Sayさん、YuOさん、Cp.Alpha2さん、ありがとうございます。
コピーするときにファイルだったりフォルダだったりするよりは
コピーの前にファイルにしてしまったほうが楽そうだったので・・・
結局Cp.Alpha2さんの言うように、ファイルを洗い出して容量を
取得する方法で開発しました。
ツイート | ![]() |