【发布时间】:2010-02-19 10:10:06
【问题描述】:
我有一个包含太多文件的文件夹,我想一个一个地浏览每个文件。问题是 Directory.GetFiles 返回一个完整的数组,这需要太长时间。
我宁愿有一个指向文件夹的对象,然后调用一个函数来返回文件夹中的下一个文件。请问.NET 有这样的类吗?
(我宁愿避免使用 win32 互操作,因为我也打算在 Mono 上使用它。)
非常感谢。
【问题讨论】:
我有一个包含太多文件的文件夹,我想一个一个地浏览每个文件。问题是 Directory.GetFiles 返回一个完整的数组,这需要太长时间。
我宁愿有一个指向文件夹的对象,然后调用一个函数来返回文件夹中的下一个文件。请问.NET 有这样的类吗?
(我宁愿避免使用 win32 互操作,因为我也打算在 Mono 上使用它。)
非常感谢。
【问题讨论】:
您无法在 .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。
【讨论】:
查看 CodeProject 网站上的 FastDirectoryEnumerator 项目。
它完全满足您的需求,甚至更多,我能够在包含大量文件的慢速网络共享上成功使用它,而且性能非常好。
缺点 - 它使用互操作,因此可能无法移植到 Mono。
【讨论】:
Environment.OSVersion 来确定您是否在Windows 下运行,并找到其他一些可以在您所针对的操作系统上快速运行的代码。