フォルダ容量を算出するには?

解決


こず  2002-08-23 03:25:35  No: 75998  IP: [192.*.*.*]

はじめまして。
データバックアップのアプリを作成しております。
複数指定したフォルダのファイル容量を算出したいのですが、
何かよい方法はないでしょうか?

編集    削除
たかみちえ  URL  2002-08-23 07:58:43  No: 75999  IP: [192.*.*.*]

とりあえずわたしの知ってる方法はこれだけです。
http://member.nifty.ne.jp/aya/wsh/

編集    削除
oku  URL  2002-08-23 10:40:20  No: 76000  IP: [192.*.*.*]

これで出来ますよ。
    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

編集    削除
oku  URL  2002-08-23 10:56:23  No: 76001  IP: [192.*.*.*]

すいませんDebug.Printのコメント間違ってます。
"App.Pathフォルダのサイズ:"
          ↓
"WINNTフォルダのサイズ:"
でした。
まあ  なんて恥ずかしい。

編集    削除
こず  2002-08-23 19:09:32  No: 76002  IP: [192.*.*.*]

レスが早くてうれしいです。
たかみちえさん、okuさん、ありがとうございました。

編集    削除
Say  2002-08-24 01:20:32  No: 76003  IP: [192.*.*.*]

残念ながら、この方法で得られるのはファイルの実バイト数の総和です。
たとえば、あるフォルダに1バイトのファイルが10個あれば10と表示されます。
しかしながら、Windows/DOSではHDDはクラスタ単位で管理されますから、
HDD上の占有サイズはこれと異なってきます。
1バイトのファイル10個の場合、クラスタサイズが4096バイトなら、
占有サイズは40960バイトになります。

この「クラスタギャップ」は小さいファイルがたくさんあるほど
大きくなりますから、バックアップ容量の計算には注意が必要です。

正確に出したければ、ファイルサイズをクラスタサイズで割り、
小数点以下を切り上げた整数にクラスタサイズを掛けたものを
占有ファイルサイズとし、フォルダ内の占有ファイルサイズの総和を
フォルダサイズとします。

編集    削除
YuO  2002-08-24 01:47:22  No: 76004  IP: [192.*.*.*]

ついでに,NTFSにはハードリンクやらReparse Pointやらという機能が……。
ハードリンクされたファイルが存在した場合,それを認識しないと正しいサイズが算出できません。

それをどうバックアップ・リストアするかはソフトウェア次第ですが,
リストア時にハードリンクされたファイルがリンクしていないのは問題になりますよね……。

編集    削除
Cp.Alpha2  URL  2002-08-27 18:12:44  No: 76005  IP: [192.*.*.*]

選択された全てのフォルダの中にあるファイルを洗い出して
容量を取得・足していく方法しかどうも思いつきません…

あとはWindowsのプロパティ表示とか。

違うこと言っていたらごめんなさい。

編集    削除
こず  2002-08-28 20:31:07  No: 76006  IP: [192.*.*.*]

Sayさん、YuOさん、Cp.Alpha2さん、ありがとうございます。
コピーするときにファイルだったりフォルダだったりするよりは
コピーの前にファイルにしてしまったほうが楽そうだったので・・・
結局Cp.Alpha2さんの言うように、ファイルを洗い出して容量を
取得する方法で開発しました。

編集    削除