Z
ZHANK
编程在线教程C++ 教程std::filesystem 文件系统
工程与工具

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");