当前位置: 首页 > news >正文

c++17_filesystem

在 C++17 引入的 <filesystem> 库中,核心功能围绕几个关键类和函数展开,其中最常用的类(及相关组件)如下:

1. std::filesystem::path

  • 表示文件路径类,用于 构造拼接分解装换

构造 :

#include <filesystem>
#include <iostream>
#include <string>
namespace fs = std::filesystem;
int main() {fs::path p1("./test");                  // 相对路径(当前目录下的test)fs::path p2("/home/user/doc");          // 绝对路径(Unix-like系统)fs::path p3("C:\\Windows\\System32");   // 绝对路径(Windows系统,注意转义符)// 字符串对象初始化std::string str = "data/file.txt";fs::path p4(str);                       // 从std::string构造std::cout << p1.string() <<'\n' << p2.string() << '\n' << p3.string() << '\n' << p4.string() << std::endl;
} 
输出 :
./test
/home/user/doc
C:\Window\System32
data/file.txt

拼接 :

  • 过运算符 / 或者 /= 直接拼接
#include <filesystem>
#include <iostream>
namespace fs = std::filesystem;
int main() {fs::path p1 = "C:";fs::path p2 = "System32";fs::path p3 = "file.txt";fs::path p4 = p1 / p2 / p3;  // windows下自动装换为 '\'std::cout << p4.string() << std::endl;  // C:System32\file.txt// 字面量的拼接fs::path path = fs::path("D:") / "soft" / ".." / "."  / "exe"; // 会自动解析 ".."(上一级目录) 和 "."(本级目录)std::cout << path.string() << std::endl;  // D:soft\..\.\exe
}
  • 注意 : 不能用在相对路径后面加绝对路径, 会被覆盖
#include <filesystem>
#include <iostream>
namespace fs = std::filesystem;
int main() {fs::path p1 = "C:";fs::path p2 = "System32";std::cout << p2 / p1 << std::endl; // "C:"
}
  • 通过append
#include <filesystem>
#include <iostream>
namespace fs = std::filesystem;
int main() {fs::path p1 = "C:";p1.append("System32").append("file.txt");    // 链式调用std::cout << p1 << std::endl; // "C:System32\\file.txt"
}

分解 :

#include <filesystem>
#include <iostream>
namespace fs = std::filesystem;
int main() {fs::path full_path = fs::path("C:") / "User" / "user" / "file.txt";// 路径分解std::cout << "文件名: " << full_path.filename() << '\n'; // 文件名: "file.txt"std::cout << "文件名(无扩展名): " << full_path.stem() << '\n'; // 文件名(无扩展名) : "file"std::cout << "扩展名: " << full_path.extension() << '\n';  // 扩展名 : ".txt"std::cout << "父目录: " << full_path.parent_path() << '\n'; // 父目录 : "C:User\\user"
}

在这里插入图片描述

2. std::filesystem::directory_iteratorstd::filesystem::recursive_directory_iterator 目录迭代类

非递归遍历目录 std::filesystem::directory_iterator

#include <filesystem>
#include <iostream>
namespace fs = std::filesystem;
int main() {fs::path full_path = fs::path("C:");for (const auto& entry : fs::directory_iterator(full_path)) {std::cout << entry.path() << std::endl;}
}

递归遍历目录 std::filesystem::recursive_directory_iterator

  • 支持通过 disable_recursion_pending() 临时禁止进入某个子目录。
#include <filesystem>
#include <iostream>
namespace fs = std::filesystem;int main() {// 递归遍历当前目录fs::recursive_directory_iterator it(".");fs::recursive_directory_iterator end;for (; it != end; ++it) {const auto& entry = *it; // 获取当前目录条目fs::path p = entry.path();// 若当前条目是目录,且名为 "x64",则跳过其递归遍历if (entry.is_directory() && p.filename() == "x64") {std::cout << "跳过目录: " << p << '\n';it.disable_recursion_pending(); // 关键调用:禁止进入该目录}else {std::cout << "遍历: " << p << '\n';}}return 0;
}

在这里插入图片描述

3. std::filesystem::directory_entry

  • 表示目录中的一个 “条目” ,由目录迭代类返回

4 . std::filesystem::filesystem_error 异常类

  • 包含错误发生的路径信息(通过 path1()path2() 获取)。
  • 可通过 code() 获取错误码(std::error_code)。
#include <filesystem>
#include <iostream>
namespace fs = std::filesystem;int main() {fs::path path = fs::path("C:\\Windows\\test");try {fs::create_directory(path);}catch (const fs::filesystem_error& e) {std::cerr << "错误: " << e.what()<< " 路径: " << e.path1() << '\n';}return 0;
}

在这里插入图片描述

5 . 其他函数

在这里插入图片描述

http://www.dtcms.com/a/570766.html

相关文章:

  • 触摸未来2025-11-04:他山之石可以攻玉,研究transformer
  • 网站开发存在的风险ps制作网站效果图
  • python 题目练习1~5
  • 网站建设组织架构免费100个简历模板
  • 做网站或者app深圳中小型网站建设公司
  • 网站建设推广刺盾云别墅室内设计网站
  • 徐州本地网站专业版简历
  • 鸿蒙HarmonyOS开源项目:知乎日报-爱影家-爱音乐-后台接口资源分享
  • 使用c 语言建设网站优点开发者
  • 机器视觉在芯片贴合中的应用
  • Razor VB 循环
  • 手机网站导航按钮网站前段打不开 后台也进不去
  • 山西省建设厅官网站软件开发是什么意思
  • 龙岗网站建设企业如何用dreamer做网站
  • 学校网站建设方案及报价河北智慧团建网站登录
  • MS7210兼容HDMI1.4b标准方案、MS7210驱动最高分辨率支持 4K@30Hz,最高采样率达到 300MHz
  • volatile、AtomicInteger、CAS 三连问:并发无锁机制一篇通透
  • 02|Langgraph | 从入门到实战 | workflow与Agent
  • 在线电影网站建设论文没营业执照怎么做网站
  • 公司网站建设工作wordpress关闭前台编辑功能
  • <RT1176系列14>CCM(Clock Controller Module)解读
  • ROS1系统学习---12 ROS1三维可视化工具RViz
  • wordpress 文章批量移动亚马逊没有网站怎么做seo
  • 建设银行融信通网站google官网入口
  • KMP算法背后的设计思想:从模式匹配到增量处理的通用哲学
  • 做薪酬调查的网站烟台优化公司
  • 做网站用后缀好合肥论坛网站制作
  • 从0开始搭建springcloud开发框架
  • 竞赛作品发表网站怎么做遂昌网站建设
  • 山东省建设厅网站广告网络营销策略