在代码中获取硬盘上最大的目录大小

时间:2011-03-23 14:54:13

标签: c# .net win32-process

我的机器有些麻烦。我的硬盘大概是500 GB,我相信我的文件不超过150 GB。但它表明可用空间仅为100 GB。我知道我的计算机中最大的目录是什么,因为当我尝试使用"*.*" size:gigabytes属性进行搜索时,这并不重要。我需要一个算法的想法,在目录中搜索然后在其子目录中搜索? e.g。

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

5 个答案:

答案 0 :(得分:3)

您需要了解递归或使用堆栈

我可以为你写出代码,但如果你打算更频繁地编写程序,这些都是要理解的基本概念。付出一点努力来理解它们。然后,您将能够完成此任务以及许多其他任务。

答案 1 :(得分:1)

您是否需要构建一个程序来执行此操作,或者您只是尝试使用代码来解决您自己的计算机问题?

如果是后者,WinDirStat将为您节省大量时间。

如果是前者,我建议你研究一下recursive functions

答案 2 :(得分: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:\\"));

修改: 对于Hans来说,您可能希望运行具有提升权限的程序来窥探您可能无法访问的目录,例如系统卷信息。

答案 3 :(得分:1)

我还建议您尝试使用WinDirStat,这是一个开源软件。 我在此分享了使用此实用程序的经验http://lazyswamp.blogspot.kr/2014/11/windirstat-for-finding-files-big-but.html

答案 4 :(得分:0)

您可以安装cygwin并执行:

$ du /cygdrive/c