我有一个包含太多文件的文件夹,我想逐个浏览每个文件。问题是Directory.GetFiles返回一个已完成的数组,这需要太长时间。
我宁愿有一个对象我会指向一个文件夹,然后调用一个函数来返回文件夹中的下一个文件。 .NET有这样的类吗?
(我更愿意避免使用win32,因为我打算在Mono上使用它。)
非常感谢。
答案 0 :(得分:8)
您不能在.NET 3.5中执行此操作,但您可以在.NET 4.0中as per this blog post:
DirectoryInfo directory = new DirectoryInfo(@"\\share\symbols");
IEnumerable<FileInfo> files = directory.EnumerateFiles();
foreach (var file in files) {
Console.WriteLine("Name={0}, Length={1}", file.Name, file.Length);
}
(同样,还有静态Directory.EnumerateFiles
方法。)
我不知道该API是否已移植到Mono。
答案 1 :(得分:1)
查看CodeProject网站上的FastDirectoryEnumerator项目。
它完全符合您的需求,甚至更多,我能够在一个包含大量文件的慢速网络共享中成功使用它,性能非常好。
缺点 - 它使用互操作,因此它可能无法移植到Mono。