C++17遍历目录文件方法详解
C++17的<filesystem>库提供跨平台目录遍历能力,核心是std::filesystem::directory_iterator(遍历一级子项)和recursive_directory_iterator(递归遍历)。
C++17 的
库提供跨平台目录遍历能力,核心是 std::filesystem::directory_iterator(遍历一级子项)和 recursive_directory_iterator(递归遍历)。

C++17 的 库提供了跨平台的目录遍历能力,无需依赖 Boost 或系统 API,核心是 std::filesystem::directory_iterator 和 std::filesystem::recursive_directory_iterator。
基础遍历:当前目录下的直接子项
使用 directory_iterator 可以逐个访问指定路径下的一级文件和子目录(不递归):
示例代码:
#include#include namespace fs = std::filesystem; int main() { for (const auto& entry : fs::directory_iterator("/path/to/dir")) { std::cout << entry.path().filename().string() << "\n"; // entry.is_regular_file(), entry.is_directory() 等可判断类型 } }
注意:directory_iterator 不保证顺序,如需排序,可先收集到 std::vector 再调用 std::sort。
递归遍历:所有子目录及其中文件
用 recursive_directory_iterator 自动深入每一层子目录:
- 默认跳过符号链接指向的目标(即不跟随 symlink),如需跟随,构造时传入
fs::directory_options::follow_directory_symlink - 可用
pop()跳出当前层级(例如过滤掉某子树),配合depth()判断当前深度 - 遍历时可能抛出
fs::filesystem_error(如权限不足),建议用 try-catch 包裹
过滤与判断:只处理特定类型或名称的文件
遍历中常需筛选,推荐方式:
- 用
entry.is_regular_file()排除非普通文件(如目录、socket、设备文件) - 用
entry.path().extension() == ".txt"检查扩展名(注意 extension() 返回fs::path,比较时用.string()或直接 path 比较) - 用
entry.path().filename().string()获取纯文件名做字符串匹配 - 避免用
entry.path().string().find(...)做路径匹配——易受路径分隔符或编码影响,应使用fs::path的成员函数(如has_filename,parent_path)
错误处理与性能提醒
真实场景中必须考虑健壮性:
- 构造迭代器前,先用
fs::exists(path) && fs::is_directory(path)验证路径有效性 - 循环内捕获
const fs::filesystem_error& e,检查e.code().value()区分 ENOENT、EACCES 等错误 - 大量小文件时,
recursive_directory_iterator可能比 shell 命令慢,因每次stat系统调用开销;如仅需文件名,可考虑fs::directory_entry::path()而非立即调用status()
Photoshop 2026 是 Adobe 推出的专业图像处理与视觉设计软件,支持 Windows、macOS 和 iPad 等平台,广泛应用于摄影修图、电商设计、平面海报、数字绘画及视觉合成等创作场景。
Blender 是一款免费开源、跨平台的专业 3D 创作软件,集建模、动画、渲染、视频编辑与视觉合成等功能于一体,广泛应用于影视动画、游戏设计和建筑可视化等领域。软件支持 Cycles 物理渲染器与 Eevee 实时渲染引擎,并提供多边形建模、骨骼绑定、物理模拟等专业工具。Blender 兼容 Windows、macOS 和 Linux 系统,安装包轻巧、运行流畅,依托活跃的全球开发者社区持续更新,是从初学者到专业创作者都值得选择的正版 3D 创作工具。
Photoshop 2026 是 Adobe 推出的专业图像处理与视觉设计软件,支持 Windows、macOS 和 iPad 等平台,广泛应用于摄影修图、电商设计、平面海报、数字绘画及视觉合成等创作场景。
Blender 是一款免费开源、跨平台的专业 3D 创作软件,集建模、动画、渲染、视频编辑与视觉合成等功能于一体,广泛应用于影视动画、游戏设计和建筑可视化等领域。软件支持 Cycles 物理渲染器与 Eevee 实时渲染引擎,并提供多边形建模、骨骼绑定、物理模拟等专业工具。Blender 兼容 Windows、macOS 和 Linux 系统,安装包轻巧、运行流畅,依托活跃的全球开发者社区持续更新,是从初学者到专业创作者都值得选择的正版 3D 创作工具。















