1

マシンに問題があります。私のハードディスクは約 500 GB で、ファイルは 150 GB 以下であると確信しています。しかし、空き容量が 100 GB しかないことがわかります。"*.*" size:gigabytesプロパティで検索しようとしたとき、それは問題ではないので、自分のコンピューターで最大のディレクトリは何かがわかります。ディレクトリを検索してからそのサブディレクトリを検索するアルゴリズムのアイデアが必要ですか? 例えば

long count = Directory.GetDirectories("C:\\");
for (int i = 0; i < count.Length; i++)
{
   // I need to look in each directory and repeat process
}
4

5 に答える 5

3

再帰について学ぶか、 Stackを使用する必要があります。

コードを書き出すこともできますが、プログラムをもっと頻繁に書く予定がある場合は、これらの概念を理解することが不可欠です。それらをよく理解するために少し努力してください。その後、このタスクだけでなく、他の多くのタスクも実行できるようになります。

于 2011-03-23T14:57:34.070 に答える
2

これを行うにはプログラムを作成する必要がありますか、それとも自分のマシンでこれを理解するためにコードを使用しようとしているだけですか?

後者の場合は、WinDirStatを使用すると時間を大幅に節約できます。

前者の場合は、再帰関数を調べることをお勧めします。

于 2011-03-23T14:59:40.433 に答える
1

これが出発点です。C:ドライブを再帰的に呼び出し、各フォルダーのサイズを計算します。辞書を保持するのではなく、最大のものを保持するなど、ニーズに合わせて変更することをお勧めします。

Func<DirectoryInfo, long> calc = null;
var sizes = new Dictionary<string, long>();
calc = di =>
            {
                var childSum = di.GetDirectories().Sum(d => calc(d));
                var size = di.GetFiles().Sum(f => f.Length);
                sizes.Add(di.FullName, childSum + size);
                return size;
            };
calc(new DirectoryInfo("C:\\"));

編集:ハンスポイントに、システムボリューム情報のように、アクセスできない可能性のあるディレクトリをスヌープするための昇格された権限でプログラムを実行することをお勧めします。

于 2011-03-23T15:24:00.507 に答える
0

cygwin をインストールして、次のように実行できます。

$ du /cygdrive/c
于 2011-03-23T14:59:00.800 に答える