gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 18:58:36 25 4
gpt4 key购买 nike

我正在尝试获取特定目录中的文件列表,其中包含超过 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 Method (String)

The EnumerateFiles and GetFiles methods differ as follows: When you use EnumerateFiles, you can start enumerating the collection of names before the whole collection is returned; when you use GetFiles, you must wait for the whole array of names to be returned before you can access the array. Therefore, when you are working with many files and directories, EnumerateFiles can be more efficient.

关于c# - 在 C# 中列出目录中的大量文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39753373/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com