DeepSeek 教我 C++ (6) : C++17 filesystem 的技巧

缘起
C++ 是个人最常用的编程语言,以前学生时代好多笔记都丢失了,想用DeepSeek帮忙快速整理一些编程细节,看看有没有没看到过的解释.

提问:整理一下C++ 17 filesystem 常用方法

以下是 C++17 std::filesystem 常用方法的整理,按功能分类:


1. 头文件与命名空间

#include 
namespace fs = std::filesystem; // 简化命名空间

2. 路径操作 (fs::path)

  • 构造路径

    fs::path p1{"C:/test/dir"};  // 字符串构造
    fs::path p2 = p1 / "file.txt"; // 路径拼接(使用 `/` 运算符)
    
  • 常用成员函数

    方法 说明
    p.filename() 文件名(如 dir/file.txtfile.txt
    p.stem() 不带扩展名的文件名(如 file.txtfile
    p.extension() 扩展名(如 .txt
    p.parent_path() 父目录路径(如 dir/file.txtdir
    p.is_absolute() 是否为绝对路径?
    p.string() 转换为字符串(跨平台自动处理斜杠)

3. 文件/目录状态检查

函数 说明
fs::exists(p) 路径是否存在?
fs::is_directory(p) 是否为目录?
fs::is_regular_file(p) 是否为普通文件?
fs::file_size(p) 文件大小(字节)
fs::last_write_time(p) 最后修改时间(返回 file_time_type

4. 目录操作

  • 创建目录

    fs::create_directory(p);      // 创建单层目录
    fs::create_directories(p);    // 递归创建多层目录
    
  • 遍历目录

    // 遍历目录内容(非递归)
    for (const auto& entry : fs::directory_iterator(p)) {
        std::cout << entry.path() << std::endl;
    }
    
    // 递归遍历目录
    for (const auto& entry : fs::recursive_directory_iterator(p)) {
        std::cout << entry.path() << std::endl;
    }
    

5. 文件操作

函数 说明
fs::copy(src, dst) 复制文件或目录(需指定选项)
fs::rename(old, new) 移动/重命名文件或目录
fs::remove(p) 删除文件或空目录
fs::remove_all(p) 递归删除目录及其内容
  • 示例:复制目录
    fs::copy("src_dir", "dst_dir", fs::copy_options::recursive);
    

6. 其他实用函数

函数 说明
fs::current_path() 获取当前工作目录
fs::current_path(p) 设置当前工作目录
fs::absolute(p) 获取绝对路径
fs::relative(p, base) 获取相对于 base 的相对路径
fs::temp_directory_path() 返回系统临时目录路径
fs::space(p) 获取磁盘空间信息(返回 space_info 结构体)

7. 错误处理

  • 异常处理

    try {
        fs::copy(src, dst);
    } catch (const fs::filesystem_error& e) {
        std::cerr << "Error: " << e.what() << std::endl;
    }
    
  • 非异常方式

    std::error_code ec;
    fs::remove(p, ec);
    if (ec) { /* 处理错误 */ }
    

8. 编译与兼容性

  • 编译器需支持 C++17
  • GCC 需添加链接选项 -lstdc++fs(旧版本可能需要)。

通过 std::filesystem,可以轻松实现跨平台(Windows/Linux/macOS)的文件系统操作!

你可能感兴趣的:(DeepSeek,教我C++,c++,java,开发语言)