c++oding="utf-8" ?>
std::filesystem::recursive_directory_iterator是首选,因它封装windows/posix底层api,自动处理路径分隔符、符号链接(默认跳过防循环)、权限异常(需try/catch),跨平台且无需第三方库。

直接用 std::filesystem 就行,C++17 起已原生支持跨平台递归遍历,无需第三方库,但要注意编译器和标准库实现差异。
为什么 std::filesystem::recursive_directory_iterator 是首选
它封装了 Windows 的 FindFirstFileEx 和 POSIX 的 fts_open(或 scandir),自动处理路径分隔符、符号链接、权限拒绝等细节。比手写递归 + opendir/FindFirstFile 更安全、更简洁。
- 默认跳过符号链接(避免循环引用),加
std::filesystem::directory_options::follow_directory_symlink才跟随 - 遇到权限不足目录(如
/proc/1/ns)会抛std::filesystem::filesystem_error,需 try/catch - Windows 下对长路径(>260 字符)支持依赖编译器:MSVC 需启用
/Zc:__cplusplus且项目配置中开启“长路径支持” - Clang/libc++ 在 macOS 上需链接
-lc++fs(Xcode 14+ 默认启用,旧版要手动加)
最简可用代码模板(含错误处理)
以下代码在 GCC 9+、Clang 10+、MSVC 2019+ 均可编译运行,关键点是捕获异常并区分“访问被拒”和“路径不存在”:
C++ Code Review Master
下载
组合式C++代码评审方案,融合静态分析、AI推理、多轮迭代评审和C++专项检查,适用于PR审查、增量代码审查、全项目评审和代码质量评分,触发词包括review cpp、cpp代码评审、C++review、代码审查。
#include <filesystem>
#include <iostream>
namespace fs = std::filesystem;
void traverse(const fs::path& root) {
try {
for (const auto& entry : fs::recursive_directory_iterator(root)) {
if (entry.is_regular_file()) {
std::cout
<h3>常见陷阱与绕过方式</h3>
<p>实际用时最容易栽在三类问题上:</p>
<ul>
<li>
<code>std::filesystem::recursive_directory_iterator</code> 构造时若传入非法路径(如空字符串、含 <code>
