如何获取文件按修改日期时间排序的文件夹中的文件列表?

oli*_*dev 26 c++ boost

我需要一个文件夹中的文件列表,文件按其修改的日期时间排序.

我在Linux下使用C++,支持Boost库.

有谁能请我提供一些如何实现这个的代码示例?

Sin*_*ion 51

大多数操作系统不以任何特定顺序返回目录条目.如果要对它们进行排序(如果要向人类用户显示结果,则可能应该这样做),您需要在单独的传递中进行排序.你可以这样做的一种方法是将条目插入到a中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));
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

然后result_set,您可以迭代,映射的boost::filesystem::path条目将按升序排列.

  • 带有auto和make_iterator_range的C++ 11版本:http://stackoverflow.com/a/20925615/472308 (3认同)
  • 请注意http://www.boost.org/doc/libs/1_46_1/libs/filesystem/v3/doc/reference.html#last_write_time.last_write_time获取路径不是状态.FS :: last_write_time(dir_iter->路径()) (2认同)