4

ディレクトリのサイズを取得する方法 (ファイルの長さを再帰的に合計する方法) については、たくさんの質問と回答があります。

しかし、私が見たすべての答えは不完全です。ボリュームを再帰的に反復する場所には、例外をスローするディレクトリがあります-UnauthorizedAccessExceptionたとえば。また、Win 7 には 260 文字を超えるパスがあり、PathTooLongException.

つまり、少なくとも C# では、例外をスローするディレクトリまたはファイルをスキップする必要があるため、C:\ ドライブをスキャンして実際のボリューム サイズを取得することはできません。

特定のディレクトリのディスクに保存されているバイトの適切で真の正確な数値を取得する方法を探しています。低レベルで C++ を書く必要があるかどうか、または Win API を呼び出す必要があるかどうかは気にしません。

これはどのように達成できますか?ありがとう。

4

1 に答える 1

2

簡単ではありませんが、実行できます。アクセス許可の問題を克服できるかどうかはわかりませんが、本質的に必要なことは、この素晴らしい作品に示されているように、下位レベルに移動して NTFS マスター ファイル テーブルを直接読み取ることです。別のそのような開発者からアイデアを得たこの思いやりのある開発者によって共有されたコードの。

こちらが参考になります。詳細な仕様については、Google の「NTFS アーキテクチャ」または設計を参照してください。そして、あなたの仕事と研究の一部を共有してください:) 多くの人に役立つでしょう

編集: あなたを助けるかもしれない別のプロジェクト。テストの結果、NTFS 3.0 以降のみをサポートすることが示されています。

于 2012-11-17T11:00:27.490 に答える