CodeWalk

directory_entry与recursive_directory_iterator遍历目录

作者:孤独的心 · 2026-05-30 12:55

请介绍 std::filesystem::directory_entry 和 recursive_directory_iterator 的用法,如何高效遍历文件系统、过滤目录与文件、获取文件元信息(大小、时间、权限)。

回答

孤独的心

directory_entry:目录项封装,提供 path()file_size()last_write_time()status()is_regular_file() 等方法。

遍历目录

#include <filesystem>
namespace fs = std::filesystem;

// 非递归遍历
for (const auto& entry : fs::directory_iterator("/path")) {
    if (entry.is_regular_file()) {
        auto size = entry.file_size();
        auto time = entry.last_write_time();
    }
}

// 递归遍历
for (const auto& entry : fs::recursive_directory_iterator("/path")) {
    if (entry.is_directory()) {
        entry.disable_recursion_pending(); // 跳过该子目录
    }
}

过滤选项

  • directory_iterator(path, directory_options::skip_permission_denied) 跳过无权限目录。
  • recursive_directory_iteratordepth() 方法获取递归深度。

符号链接is_symlink() 判断,read_symlink() 读取目标。使用 canonical()weakly_canonical() 解析。

文件时间file_time_typetime_t

auto ftime = entry.last_write_time();
auto cftime = clock::to_time_t(ftime);