【发布时间】:2020-12-10 23:07:46
【问题描述】:
我正在尝试获取最后一个文件名。 下面的代码非常优雅地完成了它。但它正在遍历目录中的所有文件。 是否可以不迭代得到最后一个文件?
#include <filesystem>
std::string latestFileName;
for (const auto &entry : fs::directory_iterator("/media/jai/Entertainment"))
latestFileName = entry.path();
std::cout << latestFileName << std::endl;
已编辑:目录中的文件已按字母顺序递增。我想选择最新的文件,它肯定是按字母顺序排列的最后一个文件。由于可能有数百万个文件,我试图避免迭代。
【问题讨论】:
-
通常迭代器是用来迭代的。您可以向随机访问迭代器添加数字,但您必须事先知道有多少文件,以便知道要添加什么。
-
如果您只是想获得按字母顺序排序的列表的最后一个,则无法避免排序。操作系统根本不必以任何顺序存储文件,这意味着您使用的 API 必须进行排序,或者您必须进行排序。
std::filesystem::directory_iterator不排序。这个boost example 展示了如何将路径复制到向量,然后使用std::sort()对其进行排序。
标签: c++ c++17 std-filesystem