我有一个包含太多文件的文件夹,我想一个一个地浏览每个文件。问题是 Directory.GetFiles 返回一个完整的数组,这需要太长时间。
我宁愿有一个指向文件夹的对象,然后调用一个函数来返回文件夹中的下一个文件。请问.NET有这样的课程吗?
(我宁愿避免使用 win32 互操作,因为我也打算在 Mono 上使用它。)
非常感谢。
您不能在 .NET 3.5 中执行此操作,但您可以在 .NET 4.0 中执行此操作,根据此博客文章:
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。
查看CodeProject 网站上的FastDirectoryEnumerator项目。
它完全满足您的需求,甚至更多,我能够在具有大量文件的慢速网络共享上成功使用它,并且性能非常好。
缺点 - 它使用互操作,因此它可能无法移植到 Mono。