【问题标题】:How to get a list of files in a folder in which the files are sorted with modified date time?如何获取文件夹中的文件列表,其中文件按修改的日期时间排序?
【发布时间】:2010-11-26 08:18:23
【问题描述】:

我需要一个文件夹中的文件列表,这些文件按照修改后的日期时间排序。

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

谁能给我一些如何实现的代码示例?

【问题讨论】:

标签: c++ boost


【解决方案1】:

大多数操作系统不会以任何特定顺序返回目录条目。如果您想对它们进行排序(如果您要向人类用户显示结果,您可能应该这样做),您需要在单独的通道中进行。您可以这样做的一种方法是将条目插入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 条目将按升序排列。

【讨论】:

  • 这里请注意,如果文件是在同一秒内创建/修改的,则不能保证它们的顺序,因为std::time_t 精确到秒。
  • 请注意boost.org/doc/libs/1_46_1/libs/filesystem/v3/doc/…。 last_write_time 获取路径而不是状态。 fs::last_write_time(dir_iter->path())
  • 能否以last_write_time的方式对路径向量进行排序?
  • 具有 auto 和 make_iterator_range 的 C++11 版本:stackoverflow.com/a/20925615/472308
猜你喜欢
  • 1970-01-01
  • 2014-05-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-27
  • 2011-11-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多