具有walklength的dirEntries不返回任何文件

具有walklength的dirEntries不返回任何文件,d,D,我正在与dirEntries合作。顺便说一句,功能很好。在使用foreach之前,我想测试一下文件的数量。我在这里查看了堆栈溢出,建议的方法是使用walkLength函数()。我接受了这个建议。它的回报是一个非零值——很好。但是,foreach不会迭代dirEntries的结果。它的行为就像walkLength将dirEntries保留在范围的末尾。有没有办法重置它,这样我就可以从dirEntries列表的开头开始?下面是一些示例代码: auto dFiles = dirEntries("",f

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

auto dFiles = dirEntries("",filter, SpanMode.shallow);
if (walkLength(dFiles) > 0)
{
    writeln("Passed walkLength function");
    foreach (src; dFiles)
    {
        writeln("Inside foreach");
    }
}
输出显示它已通过walkLength函数,但从未进入foreach迭代器


我使用dirEntries错误吗?正如有人建议的那样,我已经看过了AliCehreli的《D语言编程》一书。没有什么东西向我突出。我在网上查过,没有任何东西能说明我对这个问题的解释。当然,我可能完全偏离了问题的本质。

dirEntries
为您提供了一个范围。您使用
walkLength
消耗该范围并到达其终点。然后尝试使用
foreach
循环从中读取更多条目。然而,你已经到了它的尽头,所以没有更多的阅读

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


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

dirEntries
为您提供范围。您使用
walkLength
消耗该范围并到达其终点。然后尝试使用
foreach
循环从中读取更多条目。然而,你已经到了它的尽头,所以没有更多的阅读

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


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

好的,使用了.entry,但它不起作用。当我测试一个空目录时,程序在dirEntries调用时崩溃了。所以我用了一个try/catch。这导致了一个非常奇怪的副作用:我不能再使用“自动”打字了。我试图在dirEntries的数据类型中使用DirEntry,但编译器不喜欢它。我尝试了DirEntry[],但编译器也不喜欢它。我很抱歉让你这么痛苦。我在这里做了什么错误的假设?我解决了我的问题。丹斯南是正确的。由于命令行上的输入错误,另一个位置出现了异常。我的坏。嗯,使用了。入口,但它不起作用。当我测试一个空目录时,程序在dirEntries调用时崩溃了。所以我用了一个try/catch。这导致了一个非常奇怪的副作用:我不能再使用“自动”打字了。我试图在dirEntries的数据类型中使用DirEntry,但编译器不喜欢它。我尝试了DirEntry[],但编译器也不喜欢它。我很抱歉让你这么痛苦。我在这里做了什么错误的假设?我解决了我的问题。丹斯南是正确的。由于命令行上的输入错误,另一个位置出现了异常。我的错。