如何使用 cpp 文件系统在目录中查找最新文件
How to find the most recent file in a directory using cpp filesystem
我正在尝试获取日志目录中的最新文件。我正在使用 C++ 和 filesystem
库。
我尝试使用 experimental/filesystem
中的 directory_iterator
遍历目录中的每个文件,然后使用 std::max_element
将每个文件的 last_write_time
与有更大的。
namespace fs = std::experimental::filesystem;
auto dir_it = fs::directory_iterator(my_path);
auto path = *std::max_element(fs::begin(dir_it), fs::end(dir_it), [](const fs::directory_entry& f1, const fs::directory_entry& f2){
return fs::last_write_time(f1.path()) < fs::last_write_time(f2.path());
});
我希望得到一个 fs::directory_entry
对象,但是当我打印路径时,它是空的。
所以我查看了函数中比较的元素,在每一步中,f1.path() == f2.path()
,所以输出是可以理解的,但我没有弄清楚为什么比较函数不起作用。
max_element
需要前向迭代器,而 directory_iterator
是 input 迭代器。
所以如果你想这样做,你需要从迭代器创建一个容器,或者自己手动编写一个循环。
我正在尝试获取日志目录中的最新文件。我正在使用 C++ 和 filesystem
库。
我尝试使用 experimental/filesystem
中的 directory_iterator
遍历目录中的每个文件,然后使用 std::max_element
将每个文件的 last_write_time
与有更大的。
namespace fs = std::experimental::filesystem;
auto dir_it = fs::directory_iterator(my_path);
auto path = *std::max_element(fs::begin(dir_it), fs::end(dir_it), [](const fs::directory_entry& f1, const fs::directory_entry& f2){
return fs::last_write_time(f1.path()) < fs::last_write_time(f2.path());
});
我希望得到一个 fs::directory_entry
对象,但是当我打印路径时,它是空的。
所以我查看了函数中比较的元素,在每一步中,f1.path() == f2.path()
,所以输出是可以理解的,但我没有弄清楚为什么比较函数不起作用。
max_element
需要前向迭代器,而 directory_iterator
是 input 迭代器。
所以如果你想这样做,你需要从迭代器创建一个容器,或者自己手动编写一个循环。