首页 > 解决方案 > 使用 Directory.EnumerateFiles()

问题描述

我正在使用 Directory.EnumerateFiles() 遍历代码中的特定目录。我只需要目录中存在的每个文件的文件名,但文件数量可能很大。根据 MSDN 和其他各种来源,我们看到它提到“当您使用 EnumerateFiles 时,您可以在返回整个集合之前开始枚举名称集合。当您使用 GetFiles 时,您必须等待整个名称数组在您可以访问数组之前返回。 ",这里.

所以,我在我的机器上做了一些实验。

var files = Directory.EnumerateFiles(path);
foreach(var file in files)
{
}

在开始迭代之前,我有一个调试器,即在 foreach 中。我看到files(返回的可枚举字符串)包含我目录中的所有条目。为什么这个?这是预期的吗?

在其他一些来源上,我看到我们需要有一个单独的任务来进行迭代,同时在另一个处理线程中,可以迭代可枚举,例如。我一直在寻找类似的东西:默认情况下,枚举器会获取前 200 个文件。对 MoveNext() 的连续调用,即当访问第 201 个项目时,将获取下一批文件。

标签: c#.netdirectorygetfiles

解决方案


这里的变量files是一个IEnumerable,懒惰地评估。如果您将鼠标悬停files在调试器中并单击“结果视图”,则将进行完整的评估(就像您调用了一样ToArray())。否则,文件将仅在您需要时获取(即foreach循环一次一个)。

所以当你说:

“我看到文件(返回的可枚举字符串)包含我目录中的所有条目”

我认为你错了。


推荐阅读