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

I also recommend you to try to use WinDirStat, which is open-source software. I share my experience on using this utility here, http://lazyswamp.blogspot.kr/2014/11/windirstat-for-finding-files-big-but.html.

于 2014-11-11T10:47:35.913 回答
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 回答