C++17 filesystem库完整指南
请介绍C++17 std::filesystem库的核心组件,包括路径操作(path)、文件查询(status/file_size/last_write_time)、目录遍历(directory_iterator/recursive_directory_iterator),以及常用文件操作(copy/create_directory/rename/remove)。
回答
我还是少年
std::filesystem(C++17):跨平台文件系统操作库。
路径操作:
namespace fs = std::filesystem;
fs::path p = "/home/user/file.txt";
p.parent_path(); // /home/user
p.filename(); // file.txt
p.extension(); // .txt
p.stem(); // file
p.replace_extension(".md");
p /= "subdir"; // 拼接
文件查询:
fs::exists(p);
fs::is_regular_file(p);
fs::is_directory(p);
fs::file_size(p); // 字节数
fs::last_write_time(p); // 最后修改时间
fs::space(p); // 磁盘空间信息
目录遍历:
for (const auto& entry : fs::directory_iterator("/path")) {
entry.path(); entry.is_regular_file();
}
// 递归遍历
for (const auto& entry : fs::recursive_directory_iterator("/path")) {}
文件操作:
fs::copy(src, dst, fs::copy_options::overwrite_existing);
fs::create_directory("new_dir");
fs::create_directories("a/b/c"); // 递归创建
fs::rename(old, new);
fs::remove("file.txt");
fs::remove_all("dir"); // 递归删除
错误处理:多数函数有重载版本接收std::error_code&参数,避免抛出异常。
注意:文件大小和修改时间等在Windows/Unix间有细微差异。