具有walklength的dirEntries不返回任何文件
我正在与dirEntries合作。顺便说一句,功能很好。在使用foreach之前,我想测试一下文件的数量。我在这里查看了堆栈溢出,建议的方法是使用walkLength函数()。我接受了这个建议。它的回报是一个非零值——很好。但是,foreach不会迭代dirEntries的结果。它的行为就像walkLength将dirEntries保留在范围的末尾。有没有办法重置它,这样我就可以从dirEntries列表的开头开始?下面是一些示例代码:具有walklength的dirEntries不返回任何文件,d,D,我正在与dirEntries合作。顺便说一句,功能很好。在使用foreach之前,我想测试一下文件的数量。我在这里查看了堆栈溢出,建议的方法是使用walkLength函数()。我接受了这个建议。它的回报是一个非零值——很好。但是,foreach不会迭代dirEntries的结果。它的行为就像walkLength将dirEntries保留在范围的末尾。有没有办法重置它,这样我就可以从dirEntries列表的开头开始?下面是一些示例代码: auto dFiles = dirEntries("",f
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[],但编译器也不喜欢它。我很抱歉让你这么痛苦。我在这里做了什么错误的假设?我解决了我的问题。丹斯南是正确的。由于命令行上的输入错误,另一个位置出现了异常。我的错。