为什么C++ filesystem的directory_iterator是LegacyIterator?有无新用法?
关于std::filesystem::directory_iterator的Legacy标注说明
首先纠正一个常见的命名误解:C++标准文档里「LegacyInputIterator」这类命名中的Legacy,和你理解的通用计算机领域的“遗留过时”定义完全不是一回事:
- 这个前缀是C20引入基于Concept的迭代器体系之后,专门用来区分C20之前就存在的传统迭代器规范的标识,没有任何“已经废弃、不推荐使用”的含义。
std::filesystem::directory_iterator是C17新增的标准库组件,至今仍是C标准推荐的原生目录遍历实现,完全不存在过时的问题,你可以放心继续使用。
你现在写的while循环遍历的写法完全符合标准要求,也可以改用更简洁的范围for写法,二者逻辑完全等价:
for (const auto& entry : std::filesystem::directory_iterator("c:/folder")) { // 处理目录项即可,可通过entry.path()获取路径、entry.is_regular_file()判断是否为普通文件等 }
如果你有递归遍历子目录的需求,标准库还提供了std::filesystem::recursive_directory_iterator,支持配置遍历深度、跳过符号链接等能力,不需要自己手动实现递归逻辑。
内容的提问来源于stack exchange,提问作者Zebrafish
相关产品推荐
相关产品推荐

