c# - 使用 Directory.EnumerateFiles()
问题描述
我正在使用 Directory.EnumerateFiles() 遍历代码中的特定目录。我只需要目录中存在的每个文件的文件名,但文件数量可能很大。根据 MSDN 和其他各种来源,我们看到它提到“当您使用 EnumerateFiles 时,您可以在返回整个集合之前开始枚举名称集合。当您使用 GetFiles 时,您必须等待整个名称数组在您可以访问数组之前返回。 ",这里.
所以,我在我的机器上做了一些实验。
var files = Directory.EnumerateFiles(path);
foreach(var file in files)
{
}
在开始迭代之前,我有一个调试器,即在 foreach 中。我看到files
(返回的可枚举字符串)包含我目录中的所有条目。为什么这个?这是预期的吗?
在其他一些来源上,我看到我们需要有一个单独的任务来进行迭代,同时在另一个处理线程中,可以迭代可枚举,例如。我一直在寻找类似的东西:默认情况下,枚举器会获取前 200 个文件。对 MoveNext() 的连续调用,即当访问第 201 个项目时,将获取下一批文件。
解决方案
这里的变量files
是一个IEnumerable
,懒惰地评估。如果您将鼠标悬停files
在调试器中并单击“结果视图”,则将进行完整的评估(就像您调用了一样ToArray()
)。否则,文件将仅在您需要时获取(即foreach
循环一次一个)。
所以当你说:
“我看到文件(返回的可枚举字符串)包含我目录中的所有条目”
我认为你错了。
推荐阅读
- jquery - 使用 REST API 获取 SharePoint 人员选取器数据
- fuse - 如何使用 FUSE 文件系统最小化进程崩溃
- laravel - 在 Laravel 中无法连接到 RDS PostgresQL SSL
- c# - 在彼此的 get 属性中处理多个值
- flutter - Flutter Provider:notifyListeners() 到特定目标
- azure - 有没有办法限制同一 Azure 订阅中其他“所有者”的资源访问?
- swift - 为什么我可以成功地将 Swift 数组结构转换为 AnyObject?
- angular - 从许多到可能的中间外国集合中获取 Observable 引用
- python - 递归函数找到同时被三个数整除的最小数
- javascript - 谷歌表格撤消/重做功能