std::filesystem 文件系统
path 路径操作、directory_iterator 遍历、文件属性、跨平台路径
std::filesystem 文件系统
std::filesystem(C++17)提供了跨平台的文件路径、目录遍历、文件属性操作。
学完本章你将: 掌握 path 操作、目录遍历、文件属性、跨平台路径。
path 路径操作
cpp
#include <filesystem>
namespace fs = std::filesystem;
fs::path p = "/home/user/docs/file.txt";
p.filename(); // "file.txt"
p.stem(); // "file"(无扩展名)
p.extension(); // ".txt"
p.parent_path(); // "/home/user/docs"
p.replace_extension(".md"); // 改扩展名
fs::path full = fs::absolute(p); // 绝对路径
// 拼接——跨平台
fs::path dir = "data";
fs::path file = dir / "output" / "result.txt"; // data/output/result.txt
目录遍历
cpp
// 遍历目录(非递归)
for (const auto& entry : fs::directory_iterator("mydir")) {
std::cout << entry.path() << "\n";
}
// 递归遍历
for (const auto& entry : fs::recursive_directory_iterator("mydir")) {
if (entry.is_regular_file())
std::cout << entry.path() << " - " << entry.file_size() << " bytes\n";
}
文件操作
cpp
fs::exists(p); // 是否存在
fs::is_regular_file(p); // 是否是普通文件
fs::is_directory(p); // 是否是目录
fs::file_size(p); // 文件大小
fs::create_directory("newdir");
fs::create_directories("a/b/c"); // 递归创建
fs::copy("src.txt", "dst.txt");
fs::remove("old.txt");
fs::rename("old.txt", "new.txt");