使用 Directory.EnumerateFiles()
Using Directory.EnumerateFiles()
我正在使用 Directory.EnumerateFiles() 遍历代码中的特定目录。我只需要目录中存在的每个文件的文件名,但文件数量可能很大。根据 MSDN 和其他各种来源,我们看到它提到“当您使用 EnumerateFiles 时,您可以在返回整个集合之前开始枚举名称集合。当您使用 GetFiles 时,您必须等待整个在您可以访问数组之前要返回的名称数组。", here.
所以,我在我的机器上做了一些实验。
var files = Directory.EnumerateFiles(path);
foreach(var file in files)
{
}
在开始迭代之前,我有一个调试器,即在 foreach。我看到 files
(返回的可枚举字符串)包含我目录中的所有条目。为什么这个?这是预期的吗?
在其他一些来源上,我看到我们需要一个单独的任务来进行迭代,同时在另一个处理线程中,可以迭代可枚举,example。我一直在寻找类似的东西:默认情况下获取的枚举器让我们说前 200 个文件。连续调用 MoveNext() 即当访问第 201 项时,将获取下一批文件。
这里的变量 files
是一个 IEnumerable
,延迟求值。如果您在调试器中将鼠标悬停在 files
上并单击 'Results view',则会进行完整的评估(就像您调用 ToArray()
一样)。否则,只会在您需要时获取文件(即通过 foreach
循环一次获取一个文件)。
所以当你说:
“我看到文件(返回的可枚举字符串)包含我目录中的所有条目”
我想你错了。
我正在使用 Directory.EnumerateFiles() 遍历代码中的特定目录。我只需要目录中存在的每个文件的文件名,但文件数量可能很大。根据 MSDN 和其他各种来源,我们看到它提到“当您使用 EnumerateFiles 时,您可以在返回整个集合之前开始枚举名称集合。当您使用 GetFiles 时,您必须等待整个在您可以访问数组之前要返回的名称数组。", here.
所以,我在我的机器上做了一些实验。
var files = Directory.EnumerateFiles(path);
foreach(var file in files)
{
}
在开始迭代之前,我有一个调试器,即在 foreach。我看到 files
(返回的可枚举字符串)包含我目录中的所有条目。为什么这个?这是预期的吗?
在其他一些来源上,我看到我们需要一个单独的任务来进行迭代,同时在另一个处理线程中,可以迭代可枚举,example。我一直在寻找类似的东西:默认情况下获取的枚举器让我们说前 200 个文件。连续调用 MoveNext() 即当访问第 201 项时,将获取下一批文件。
这里的变量 files
是一个 IEnumerable
,延迟求值。如果您在调试器中将鼠标悬停在 files
上并单击 'Results view',则会进行完整的评估(就像您调用 ToArray()
一样)。否则,只会在您需要时获取文件(即通过 foreach
循环一次获取一个文件)。
所以当你说:
“我看到文件(返回的可枚举字符串)包含我目录中的所有条目”
我想你错了。