Как получить список файлов в папке, в которой файлы отсортированы с измененным временем даты? - PullRequest
26 голосов
/ 26 ноября 2010

Мне нужен список файлов в папке, и файлы отсортированы по дате изменения.

Я работаю с C ++ под Linux, поддерживается библиотека Boost.

Может ли кто-нибудь предоставить мне пример кода, как это реализовать?

1 Ответ

50 голосов
/ 26 ноября 2010

Большинство операционных систем не возвращают записи каталога в каком-либо определенном порядке. Если вы хотите отсортировать их (вам, вероятно, следует, если вы собираетесь показывать результаты пользователю), вам нужно сделать это в отдельном проходе. Один из способов сделать это - вставить записи в std::multimap, примерно так:

namespace fs = boost::filesystem;
fs::path someDir("/path/to/somewhere");
fs::directory_iterator end_iter;

typedef std::multimap<std::time_t, fs::path> result_set_t;
result_set_t result_set;

if ( fs::exists(someDir) && fs::is_directory(someDir))
{
  for( fs::directory_iterator dir_iter(someDir) ; dir_iter != end_iter ; ++dir_iter)
  {
    if (fs::is_regular_file(dir_iter->status()) )
    {
      result_set.insert(result_set_t::value_type(fs::last_write_time(dir_iter->path()), *dir_iter));
    }
  }
}

Затем можно выполнить итерацию по result_set, и сопоставленные записи boost::filesystem::path будут в порядке возрастания.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...