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 的 里,entry.path() 返回的类型是 std::filesystem::path,它不是普通的字符串,而是一个专门用来表示路径的类。

🔹 为什么有 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,方便打印或和其他字符串拼接。

posted @ 2025-09-12 08:55  lyrrr  阅读(8)  评论(0)    收藏  举报