1

以下语句有错误,请帮助修复它。

 long siz = dirinfo.EnumerateFiles().Sum(file => file.length);

“System.IO.DirectoryInfo”不包含“EnumerateFiles”的定义,并且找不到接受“System.IO.DirectoryInfo”类型的第一个参数的扩展方法“EnumerateFiles”(您是否缺少 using 指令或程序集引用?)

是否需要任何名称空间?我已经把命名空间System.IO

正如你们所有人所说,我更改了代码并

static long dirsize(DirectoryInfo dirinfo,bool includesubdir) { siz += dirinfo.GetFiles("*", SearchOption.AllDirectories).Sum(dire => dirsize(dire, true));

}

当我使用它时,它会给出一个错误,因为无法从 fileinfo 转换为 directoryinfo 。

我的问题是我会通过将 directoryinfo 更改为 fileinfo ...来获得一个特定的目录大小吗?可能吗...?请帮我解决它。提前致谢。

4

3 回答 3

2

在 4.0 之前的 .Net Framework 中,您可以使用

long siz = dirinfo.GetFiles().Sum(file => file.Length);

实际上在你的情况下没有区别。因为无论如何您都应该枚举所有文件以计算大小(EnumerateFiles 一个接一个地返回文件,GetFiles 返回所有文件)。

于 2013-01-25T11:09:13.273 回答
1

我假设您使用的框架版本低于 .NET 4。

DirectoryInfo.EnumerateFiles与 .NET 4 一起添加。然后你可以使用DirectoryInfo.GetFiles它首先将所有内容加载到内存中,并且从 1.1 开始可用。

这里的另一种(未经测试的)方法:

http://www.codeproject.com/Articles/12782/File-System-Enumerator-using-lazy-matching

于 2013-01-25T11:06:33.623 回答
1

DirectoryInfo.EnumerateFiles()方法随 .NET 4.0 一起提供。

你应该下载.NET Framework 4.0版本。

尝试使用DirectoryInfo.GetFiles()方法代替,它自 .NET Framework 1.1 以来就存在。

从当前目录返回一个文件列表。

于 2013-01-25T11:08:41.550 回答