我的机器有些麻烦。我的硬盘大概是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
}
答案 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