我有一个文件夹fold
,其中包含子文件夹sub1
,sub2
... subX
,其中包含 unique 文件。
比方说,我需要找到文件X的第一个匹配项。
我需要做的是获得一个fold
迭代器,该迭代器按顺序经过subX
或获取文件夹列表并自己对其进行排序。我运行了几次,然后发现迭代器确实按字母顺序进行,但是,我在文档中找不到它的指定位置,因此可能是巧合。我看到了:
Linux列表未排序。这是因为目录迭代的顺序未指定。顺序取决于基础操作系统API和文件系统细节。因此,我们需要自己对结果进行排序。
编辑:fold
中的文件始终按字母顺序生成,以防万一发生任何变化...
我可以相信它总是会按顺序进行迭代吗? Windows的“ 基础操作系统API ”是否指定顺序?根据本文What order does the DIR command arrange files if no sort order is specified,我不这么认为。
答案 0 :(得分:4)
boost::filesystem
将在Windows上以FindFirstFile
和FindNextFile
的形式实现。
这些功能的documentation状态:
不能保证搜索返回文件的顺序(例如字母顺序),并且取决于文件系统。如果必须对数据进行排序,则应用程序必须在获得所有结果之后进行排序。
答案 1 :(得分:2)
我可以相信它总是会按顺序进行迭代吗?
未指定通过解引用directory_iterator的连续增量而获得的目录条目的顺序。
因此否,您永远无法相信它会按顺序进行迭代。
如果需要特定的订单,则可以将条目存储到容器中,对其进行排序,然后迭代该容器。
PS。同样适用于std::filesystem::directory_iterator
。