Skip to content

std::filesystem(C++17)

一句话

平台无关的文件系统操作库:路径拼接与规范化、目录创建与遍历、文件复制与删除、权限与状态查询——告别 stat()opendir()

头文件

#include <filesystem>

核心 API 速查

操作签名说明
路径类class path路径的构造、拼接、分解(跨平台分隔符处理)
路径拼接path operator/(const path& lhs, const path& rhs)p / "subdir" / "file.txt"
当前路径path current_path()获取/设置工作目录
目录迭代class directory_iterator遍历单层目录
递归迭代class recursive_directory_iterator递归遍历子目录
文件状态bool exists(const path& p)检查路径是否存在
文件大小uintmax_t file_size(const path& p)获取文件字节数
创建目录bool create_directory(const path& p)创建单个目录
创建多级目录bool create_directories(const path& p)递归创建整个路径
复制文件bool copy_file(const path& from, const path& to)复制单个文件
删除bool remove(const path& p)删除文件或空目录
递归删除uintmax_t remove_all(const path& p)递归删除目录及内容
重命名void rename(const path& old, const path& newp)重命名或移动

最小示例

cpp
// Standard: C++17
#include <filesystem>
#include <iostream>

namespace fs = std::filesystem;

int main() {
    fs::path p = fs::current_path() / "test.txt";
    std::cout << p << "\n";                      // 完整路径
    std::cout << p.filename() << "\n";           // test.txt
    std::cout << p.extension() << "\n";          // .txt

    fs::create_directories("a/b/c");             // 递归创建
    std::cout << fs::exists("a/b") << "\n";      // true
    fs::remove_all("a");                         // 递归删除
}

嵌入式适用性:低

  • 依赖操作系统文件系统抽象层(POSIX 或 Win32),裸机环境无文件系统
  • 适用于嵌入式 Linux(如 Buildroot/Yocto 平台)或上位机配置/日志工具
  • 头文件引入的开销较大,资源极度受限的设备不建议使用
  • 对需要文件系统的嵌入式场景(如 FAT32 on SD card),可选用轻量级替代(如 LittleFS)

编译器支持

GCCClangMSVC
8719.12

另见


部分内容参考自 cppreference.com,采用 CC-BY-SA 4.0 许可

基于 VitePress 构建