【问题标题】:Have Directory.GetFiles return one file at a time? (.NET)Directory.GetFiles 一次返回一个文件吗? (。网)
【发布时间】:2010-02-19 10:10:06
【问题描述】:

我有一个包含太多文件的文件夹,我想一个一个地浏览每个文件。问题是 Directory.GetFiles 返回一个完整的数组,这需要太长时间。

我宁愿有一个指向文件夹的对象,然后调用一个函数来返回文件夹中的下一个文件。请问.NET 有这样的类吗?

(我宁愿避免使用 win32 互操作,因为我也打算在 Mono 上使用它。)

非常感谢。

【问题讨论】:

    标签: .net directory getfiles


    【解决方案1】:

    您无法在 .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。

    【讨论】:

    • 只是一个问题,为什么不使用: var files = directory.EnumerateFiles(); ?
    • @Filip:我不知道 Jon 的原因,但为了清楚起见,我会使用类型名称,因为从方法名称中它返回的类型并不明显。
    • @Fredrik,它会返回一个可枚举的文件信息列表还不够清楚吗? Method-name 是不言自明的。 DirectoryInfo 也是如此,我宁愿使用 var directory =... 我知道编译时存在差异。
    • @Fredrik:该示例直接从引用的博客文章中复制。
    • 谢谢。我希望能在 .NET 2 中工作的东西,但如果它不存在,它就不存在。 (这是 Tuatology 俱乐部的第二条规则。)
    【解决方案2】:

    查看 CodeProject 网站上的 FastDirectoryEnumerator 项目。

    它完全满足您的需求,甚至更多,我能够在包含大量文件的慢速网络共享上成功使用它,而且性能非常好。

    缺点 - 它使用互操作,因此可能无法移植到 Mono。

    【讨论】:

    • 谢谢,我可能最终会使用它,但如果它引发互操作异常,则返回到 Directory.GetFiles,表明我可能不在 win32 上。
    • 您可以使用Environment.OSVersion 来确定您是否在Windows 下运行,并找到其他一些可以在您所针对的操作系统上快速运行的代码。
    猜你喜欢
    • 1970-01-01
    • 2012-10-05
    • 1970-01-01
    • 2011-02-12
    • 2022-01-12
    • 1970-01-01
    • 2021-05-12
    • 2012-05-23
    • 2018-08-31
    相关资源
    最近更新 更多