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

解決


こず  2002-08-23 03:25:35  No: 75998

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


たかみちえ  URL  2002-08-23 07:58:43  No: 75999

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


oku  URL  2002-08-23 10:40:20  No: 76000

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

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


こず  2002-08-23 19:09:32  No: 76002

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


Say  2002-08-24 01:20:32  No: 76003

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

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

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


YuO  2002-08-24 01:47:22  No: 76004

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

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


Cp.Alpha2  URL  2002-08-27 18:12:44  No: 76005

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

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

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


こず  2002-08-28 20:31:07  No: 76006

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


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加