Получение наибольшего размера каталога на жестком диске в коде - PullRequest
1 голос
/ 23 марта 2011

У меня проблемы с машиной. Мой жесткий диск составляет около 500 ГБ, и я уверен, что мои файлы не более 150 ГБ. Но это показывает, что свободного места всего 100 ГБ. Я бы знал, какая самая большая директория на моем компьютере, потому что, когда я пытался выполнить поиск по свойству "*.*" 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
}

Ответы [ 5 ]

3 голосов
/ 23 марта 2011

Вам нужно либо узнать о рекурсии , либо использовать Stack .

Я мог бы написать код для вас, но если вы планируете писать программы чаще, это важные понятия, которые нужно понять.Приложите немного усилий, чтобы понять их хорошо.Тогда вы сможете выполнить эту задачу так же, как и многие другие.

1 голос
/ 11 ноября 2014

Я также рекомендую вам попробовать использовать WinDirStat, программное обеспечение с открытым исходным кодом. Я делюсь своим опытом использования этой утилиты здесь, http://lazyswamp.blogspot.kr/2014/11/windirstat-for-finding-files-big-but.html.

1 голос
/ 23 марта 2011

Вот отправная точка, она будет рекурсивно вызывать диск 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:\\"));

EDIT : По словам Ганса, вы можете захотеть запустить программу с повышенными правами для отслеживания в каталогах, к которым у вас нет доступа, например, в разделе «Сведения о томе системы».

1 голос
/ 23 марта 2011

Вам нужно создать программу для этого или вы просто пытаетесь использовать код, чтобы выяснить это для вашей собственной машины?

Если это позднее, WinDirStat сэкономит вам много времени.

Если это первое, я предлагаю вам изучить рекурсивные функции .

0 голосов
/ 23 марта 2011

Вы можете просто установить Cygwin и сделать:

$ du /cygdrive/c
...