Я пытаюсь получить самый последний файл в каталоге журнала. Я использую библиотеку С++ и filesystem
.
Я попытался использовать directory_iterator
из experimental/filesystem
для перебора каждого файла в моем каталоге и, используя 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
— итератор Вход.
Поэтому, если вы хотите сделать что-то таким образом, вам нужно либо создать контейнер из итераторов, либо вручную написать цикл.
Спасибо, извините за эту простую ошибку. Наконец-то я сделал петлю сам.