确实可以提高directory_iterator在Windows上按字母顺序访问文件和文件夹

Does boost directory_iterator visit files and folders in alphabetical order on Windows

本文关键字:顺序 访问 文件夹 文件 Windows iterator directory      更新时间:2023-10-16

我有一个文件夹fold,其中包含子文件夹sub1sub2...subX,里面有独特的文件。

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

我所需要的只是获得一个按顺序通过subXfold迭代器,或者获取文件夹列表并自己订购。我运行了几次,我注意到迭代器确实是按字母顺序排列的,但是,我找不到文档中指定的它,所以这可能是巧合。但是我看到:

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

  • Windows上没有任何内容(让我想知道(

编辑:fold中的文件始终按字母顺序生成,以防万一更改任何内容...

问题:

我可以相信它总是会按顺序迭代吗?Windows的">底层操作系统API"是否指定顺序?基于这篇文章:如果没有指定排序顺序,DIR 命令排列文件的顺序是什么,我不这么认为。

boost::filesystem将在Windows上以FindFirstFileFindNextFile来实现。

这些函数的文档指出:

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

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

参考资料说:

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

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

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


这同样适用于std::filesystem::directory_iterator