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

杰里米·麦克

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

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

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

哈比卜

您正在创建一个内存为2000万个对象的列表。我认为即使有可能,您也不会使用它。

而是使用Directory.EnumerateFiles(searchDir)逐项迭代每个项目。

喜欢:

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

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

请参阅:Directory.EnumerateFiles方法(字符串)

EnumerateFiles和GetFiles方法的区别如下:使用EnumerateFiles时,可以在开始返回整个集合之前开始枚举名称集合;否则,您可以开始枚举名称集合。使用GetFiles时,必须等待返回整个名称数组,然后才能访问该数组。因此,当您处理许多文件和目录时,EnumerateFiles可能会更有效。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章