C++ boost目录迭代器是否在Windows上按字母顺序访问文件和文件夹

C++ boost目录迭代器是否在Windows上按字母顺序访问文件和文件夹,c++,windows,boost,C++,Windows,Boost,我有一个文件夹fold,其中包含子文件夹sub1,sub2subX,其中包含唯一的文件 假设我需要找到文件X的第一个匹配项 我所需要的就是得到一个折叠迭代器,该迭代器按顺序通过subX,或者得到一个文件夹列表,然后自己排序。我运行了几次,发现迭代器确实是按字母顺序运行的,但是,我在文档中找不到指定的迭代器,所以这可能是巧合。然而,我看到: Linux列表未排序。这是因为目录迭代的顺序是未指定的。排序取决于底层操作系统API和文件系统细节。因此,我们需要自己对结果进行排序 窗户上什么都没有(让我

我有一个文件夹
fold
,其中包含子文件夹
sub1
sub2
subX
,其中包含唯一的文件

假设我需要找到文件X的第一个匹配项

我所需要的就是得到一个
折叠
迭代器,该迭代器按顺序通过
subX
,或者得到一个文件夹列表,然后自己排序。我运行了几次,发现迭代器确实是按字母顺序运行的,但是,我在文档中找不到指定的迭代器,所以这可能是巧合。然而,我看到:

Linux列表未排序。这是因为目录迭代的顺序是未指定的。排序取决于底层操作系统API和文件系统细节。因此,我们需要自己对结果进行排序

  • 窗户上什么都没有(让我好奇)
编辑:
折叠中的文件总是按字母顺序生成,以防发生任何更改

问题: 我能相信它总是按顺序迭代吗?Windows的“底层操作系统API”是否指定顺序?根据这篇文章,我不这么认为

我能相信它总是按顺序迭代吗

报告说:

未指定通过取消引用目录迭代器的连续增量而获得的目录项的顺序

因此,,您永远不能相信它会按顺序迭代

如果需要特定的顺序,则可以将条目存储到容器中,对其进行排序,然后迭代容器



PS.同样适用于
std::filesystem::directory\u迭代器。

boost::filesystem
将在windows上以
FindFirstFile
FindNextFile
的形式实现

这些职能的主要职责是:

搜索返回文件的顺序(如字母顺序)不受保证,取决于文件系统。如果必须对数据进行排序,则应用程序必须在获得所有结果后进行排序


即使当前的文件系统做到了,nextwork共享的可能性也要小得多,而下一代的操作系统;好吧,所有的赌注都输光了。您是否期望超过一百万个子目录?否则,获取列表和排序将非常便宜。你会支持吗?首先,我想,按你的规格是按字母顺序排列的吗?嗯。。。最多5个子目录。我明白你的意思。虽然它似乎在工作,但我不能保证它能站得住——或者windows是否总是以同样的方式工作(如果这是一种当前的方式)。谢谢注意Windows默认不支持文件名,但是IIRC,它可以在注册表中关闭。因此,正如雅克所说,您不能假定特定的排序顺序。此外,例如,如果只调用
std::sort
,结果可能与Windows使用
strmplogicalw
生成的结果不同。当我读到这篇文章时,我认为它是未指定的,因为基于OS文件系统的更改。这就是我特别要求windows的原因——因为Linux被认为是非功能性的。@MTLaurentys在任何系统的链接文档中都没有给出任何保证。