dir具有步行长度的条目不返回任何文件

  • 本文关键字:返回 文件 任何 dir d
  • 更新时间 :
  • 英文 :


我正在使用目录条目。顺便说一下,功能很棒。 我想在对它使用 foreach 之前测试文件的数量。我在这里查看了堆栈溢出,建议的方法是使用 walkLength 函数(使用 Dlang 计算目录中的文件)。 我接受了这个建议。 它的回报是一个非零值 - 很棒。但是,foreach 不会迭代目录的结果。它的行为就像walkLength在范围的末尾留下了dirEntrys。 有没有办法重置它,以便我可以从目录列表的开头开始? 下面是一些示例代码:

auto dFiles = dirEntries("",filter, SpanMode.shallow);
if (walkLength(dFiles) > 0)
{
writeln("Passed walkLength function");
foreach (src; dFiles)
{
writeln("Inside foreach");
}
}

输出显示它通过了walkLength函数,但从未进入foreach迭代器。

我使用目录条目有误吗?我看过Ali Cehreli的好书《D编程》,有人建议。 没有什么让我印象深刻。 我在网上看过,没有任何迹象表明我对这个问题的解释。当然,我可能完全偏离了问题的真正含义。

dirEntries给你一个范围。您用walkLength消耗该范围并达到其终点。然后,您尝试使用foreach循环从中读取更多条目。但是,您已经到了尽头,因此没有什么可阅读的了。

您可以重复dirEntries调用,使用 std.array 中的array函数将范围转换为数组,或使用.save函数创建传递给walkLength的范围的副本。

如果你不关心长度,只关心它是否为空,你可以使用范围的.empty属性而不是walkLength

最新更新