在Windows上boost目录_iterator是否按字母顺序访问文件和文件夹

时间:2018-08-17 15:55:04

标签: c++ windows boost

我有一个文件夹fold,其中包含子文件夹sub1sub2 ... subX,其中包含 unique 文件。

比方说,我需要找到文件X的第一个匹配项。

我需要做的是获得一个fold迭代器,该迭代器按顺序经过subX或获取文件夹列表并自己对其进行排序。我运行了几次,然后发现迭代器确实按字母顺序进行,但是,我在文档中找不到它的指定位置,因此可能是巧合。我看到了:

  

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

  • Windows上没有任何内容(让我感到奇怪)

编辑:fold中的文件始终按字母顺序生成,以防万一发生任何变化...

问题:

我可以相信它总是会按顺序进行迭代吗? Windows的“ 基础操作系统API ”是否指定顺序?根据本文What order does the DIR command arrange files if no sort order is specified,我不这么认为。

2 个答案:

答案 0 :(得分:4)

boost::filesystem将在Windows上以FindFirstFileFindNextFile的形式实现。

这些功能的documentation状态:

  

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

答案 1 :(得分:2)

  

我可以相信它总是会按顺序进行迭代吗?

reference说:

  

未指定通过解引用directory_iterator的连续增量而获得的目录条目的顺序。

因此,您永远无法相信它会按顺序进行迭代。

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


PS。同样适用于std::filesystem::directory_iterator