【发布时间】:2018-08-17 15:55:03
【问题描述】:
我有一个文件夹 fold,其中包含子文件夹 sub1、sub2...subX,其中包含 唯一 个文件。
假设我需要找到文件 X 的第一个匹配项。
我所需要的只是获得一个通过subX 的fold 迭代器,或者获得一个文件夹列表并自己对其进行排序。我运行了几次,我注意到迭代器确实按字母顺序排列,但是,我在文档中找不到它,所以这可能是巧合。但是我看到了:
Linux 列表未排序。那是因为目录迭代的顺序是未指定的。排序取决于底层操作系统 API 和文件系统细节。所以我们需要自己对结果进行排序。
- Windows 上什么都没有(让我好奇)
编辑:fold 中的文件始终按字母顺序生成,以防发生任何更改...
问题:
我可以相信它总是会按顺序迭代吗? Windows 的“底层操作系统 API”是否指定了顺序?根据这篇文章:What order does the DIR command arrange files if no sort order is specified,我不这么认为。
【问题讨论】:
-
即使当前的文件系统做到了,nextwork share 的可能性也小得多,而且操作系统的下一次迭代;好吧,所有的赌注都没有了。您是否期望超过一百万个子目录?如果没有,获取列表和排序将非常便宜。你会支持吗?首先,我假设您的规格是按字母顺序排列的吗?
-
嗯...最多 5 个子目录。我明白你的意思。虽然它似乎在工作,但我无法确保它能够正常工作——或者 Windows 是否总是以相同的方式工作(如果这甚至是当前的方式)。谢谢
-
请注意,Windows 默认使用 fancy sorting 的文件名,但 IIRC,可以在注册表中将其关闭。因此,正如 Yakk 所说,您不能假设特定的排序顺序。此外,例如,如果您只是调用
std::sort,结果可能与Windows 使用StrCmpLogicalW生成的结果不同。