【发布时间】:2013-07-07 12:43:20
【问题描述】:
我有以下方法来获取以字节为单位的目录大小:
public static long GetDirectorySize(string folderPath)
{
DirectoryInfo di = new DirectoryInfo(folderPath);
return di.EnumerateFiles("*", SearchOption.AllDirectories).Sum(fi => fi.Length);
}
我想添加以下功能 - 如果目录的大小大于 500 MB(或任何输入数字),我希望它返回 -1;
我可以通过将return更改为:
var size = di.EnumerateFiles("*", SearchOption.AllDirectories).Sum(fi => fi.Length)
return (size <= 500*1024) ? size : -1;
这既不优雅也不高效,因为它遍历了.Sum(fi => fi.Length) 中的所有文件。
是否有一种优雅的方式来添加功能,允许调用者添加阈值?
注意:我试图避免迭代所有文件,如果有一个包含 100,000 个文件的文件夹并且第一个大于 500 MB,则继续迭代没有意义。
【问题讨论】:
-
你可以使用
TakeWhile()有副作用。 -
这是否意味着您想要磁盘值的大小而不是目录的大小?还是两者在您需要的方面可以忽略不计?
-
@keyboardP,我想要磁盘上目录的大小。但如果它超过某个阈值,我想返回-1。一旦达到这个阈值,我不想迭代停止迭代。
标签: c# .net directory filesize