在 C# 中列出目录中的大量文件

2024-02-14

我正在尝试获取特定目录中的文件列表,其中包含超过 2000 万个文件,每个文件大小从 2 KB 到 20 KB 不等。
问题是我的程序每次都会抛出内存不足异常,而像 robocopy 这样的工具可以很好地将文件夹复制到另一个目录,没有任何问题。这是我用来枚举文件的代码:

            List<string> files = new List<string>(Directory.EnumerateFiles(searchDir));

我应该怎么做才能解决这个问题? 任何帮助,将不胜感激。


您正在内存中创建一个包含 2000 万个对象的列表。我认为你永远不会使用它,即使它成为可能。

相反使用Directory.EnumerateFiles(searchDir)并逐项迭代。

like:

foreach(var file in Directory.EnumerateFiles(searchDir))
{
   //Copy to other location, or other stuff
}

使用您当前的代码,您的程序将首先在内存中加载 2000 万个对象,然后您必须对它们进行迭代或执行操作。

See: Directory.EnumerateFiles 方法(字符串) https://msdn.microsoft.com/en-us/library/dd383458(v=vs.110).aspx

EnumerateFiles 和 GetFiles 方法的区别如下: 使用EnumerateFiles,可以开始枚举集合 返回整个集合之前的名称;当你使用 GetFiles,必须等待返回整个名称数组 在您可以访问该数组之前。因此,当您与 对于很多文件和目录,EnumerateFiles 可以更加高效。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 C# 中列出目录中的大量文件 的相关文章

随机推荐