c++文件操作
这一行代码:
for (auto& entry : fs::directory_iterator(".")) {
意思是:
使用 C++17 引入的 std::filesystem 库(这里起了别名 fs);
创建一个 目录迭代器,遍历 "." 目录下的所有文件和子目录;
"." 表示当前工作目录;
auto& entry 就是当前迭代到的目录项(可以是文件,也可以是子目录),类型是 std::filesystem::directory_entry;
在循环体里你可以通过 entry.path() 得到完整路径,通过 entry.is_regular_file() 判断是否是普通文件等。
为什么它的作用范围只在当前目录
fs::directory_iterator(".") 只会列出当前目录的内容;
它不会自动递归进入子目录(那要用 recursive_directory_iterator 才能做到);
所以写成这样,逻辑上就把“要处理的文件”限制在当前目录这一层。
常见成员函数(两者都能用)
entry.path() → 返回完整路径
entry.is_directory() → 是否是目录
entry.is_regular_file() → 是否是普通文件
entry.is_symlink() → 是否是符号链接
entry.file_size() → 文件大小(仅对文件有效)
entry.last_write_time() → 最后修改时间
.path()为什么还要.string()转为字符串
ChatGPT 说:
好问题 👍。
在 C++17 的
🔹 为什么有 path 类型
文件路径不仅仅是字符串,不同操作系统下编码规则不同:
Windows → 宽字符(UTF-16,wstring)
Linux/Unix → 窄字符(UTF-8,string)
std::filesystem::path 内部封装了这些细节,让你写的代码能 跨平台统一工作。
🔹 .path() 返回 path,.string() 转换为字符串
entry.path() → 返回 std::filesystem::path 对象,可以继续用成员函数处理:
entry.path().filename(); // 文件名
entry.path().extension(); // 扩展名
entry.path().parent_path();// 父目录
entry.path().string() → 把路径转换成 std::string,方便打印或和其他字符串拼接。

浙公网安备 33010602011771号