c++17标准std::filesystem常用函数

std::filesystem 是 C++17 引入的标准库,用于处理文件系统操作,提供了跨平台的文件和目录操作能力。以下是一些常用的函数和类:

一、路径操作(std::filesystem::path

cpp

运行

#include <filesystem>
namespace fs = std::filesystem;// 路径构造与分解
fs::path p = "C:/data/file.txt";
p.parent_path();    // 返回目录路径:"C:/data"
p.filename();       // 返回文件名:"file.txt"
p.stem();           // 返回文件名(不含扩展名):"file"
p.extension();      // 返回扩展名:".txt"// 路径拼接
p /= "subdir";      // 拼接路径:"C:/data/subdir"
p.append("newfile"); // 等价于 p /= "newfile"// 规范化路径
p.normalize();      // 解析 ".." 和 ".",简化路径
p.lexically_normal(); // 仅做字符串处理,不检查文件系统

二、文件 / 目录状态检查

cpp

运行

fs::exists(p);      // 文件或目录是否存在
fs::is_regular_file(p); // 是否为普通文件
fs::is_directory(p);    // 是否为目录
fs::is_symlink(p);      // 是否为符号链接
fs::is_empty(p);        // 文件是否为空或目录是否为空
fs::file_size(p);       // 文件大小(字节)
fs::last_write_time(p); // 最后修改时间

三、文件操作

cpp

运行

// 创建/删除文件
fs::create_directory("new_dir");         // 创建单个目录
fs::create_directories("a/b/c");         // 递归创建目录
fs::remove("file.txt");                  // 删除文件或空目录
fs::remove_all("dir");                   // 递归删除目录及其内容// 文件属性
fs::permissions(p, fs::perms::add_write); // 添加写权限
fs::copy_file("src.txt", "dst.txt");      // 复制文件
fs::rename("old.txt", "new.txt");         // 重命名文件

四、目录遍历

cpp

运行

// 范围-based for 遍历目录
for (const auto& entry : fs::directory_iterator("dir")) {if (entry.is_regular_file()) {std::cout << "文件: " << entry.path() << std::endl;}
}// 递归遍历(C++17)
for (const auto& entry : fs::recursive_directory_iterator("dir")) {std::cout << entry.path() << std::endl;
}// 过滤特定类型的文件
for (const auto& entry : fs::directory_iterator("dir")) {if (entry.path().extension() == ".txt") {// 处理 .txt 文件}
}

五、文件时间与权限

cpp

运行

// 文件时间戳
auto time = fs::last_write_time(p);
fs::last_write_time(p, std::filesystem::file_time_type::clock::now()); // 更新时间// 文件权限(POSIX风格)
fs::permissions(p, fs::perms::owner_read | fs::perms::owner_write | fs::perms::group_read);

六、错误处理

cpp

运行

// 异常安全版本(默认)
try {fs::create_directory("test");
} catch (const fs::filesystem_error& e) {std::cerr << "错误: " << e.what() << "\n路径: " << e.path1() << std::endl;
}// 错误码版本(非抛出)
std::error_code ec;
fs::create_directory("test", ec);
if (ec) {std::cerr << "错误码: " << ec.value() << ", " << ec.message() << std::endl;
}

七、跨平台注意事项

  1. 路径分隔符

    • 使用原始字符串字面量避免转义问题:R"(C:\data\file.txt)"
    • 或使用斜杠(/),std::filesystem 会自动转换为平台特定格式
  2. 环境兼容性

    • Windows:支持 UNC 路径(如 \\server\share\file.txt
    • Linux/macOS:支持符号链接和硬链接

八、示例:计算目录大小

cpp

运行

uintmax_t calculateDirectorySize(const fs::path& dir) {uintmax_t size = 0;for (const auto& entry : fs::recursive_directory_iterator(dir)) {if (entry.is_regular_file()) {size += entry.file_size();}}return size;
}

九、兼容性说明

  • C++17:完整支持 std::filesystem
  • C++14:实验性版本 std::experimental::filesystem
  • GCC/Clang:需要链接 -lstdc++fs(GCC 7-9)
  • MSVC:无需额外链接,确保启用 /std:c++17

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/bicheng/86504.shtml
繁体地址,请注明出处:http://hk.pswp.cn/bicheng/86504.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

非结构化文档的自动化敏感标识方法技术解析

在数字化时代&#xff0c;企业与组织面临的数据形态正发生深刻变革。据统计&#xff0c;非结构化数据占企业数据总量的 80% 以上&#xff0c;涵盖文本、邮件、PDF、日志、社交媒体内容等多种形式。这些数据中往往蕴含着大量敏感信息&#xff0c;如个人身份信息、商业机密、医疗…

c语言中的字符类型

字符类型 char char是一种整数&#xff0c;也是一种特殊的类型&#xff1a;字符。 #include <stdio.h> int main(){char c,d;c 1; //把整数1赋值给变量cd 1; //把字符‘1’赋值给变量dif (c d){printf("相等");}else{printf("不相等\n");…

Cribl stream 管道对时间的改变时区

先说一下时区的重要性&#xff0c;要是cribl 时区是UTC&#xff0c;但是过来数据是GTM8 就是中国时区&#xff0c;那么数据过来&#xff0c;就可能在后端的Splunk 没有显示&#xff0c;那么解决这个问题&#xff0c;cribl 管道引入了auto timestamp 的功能&#xff1a; 注意到&…

深度学习:PyTorch卷积神经网络(1)

本文目录&#xff1a; 一、CNN概述二、CNN日常应用三、CNN的卷积层&#xff08;一 &#xff09;基本介绍&#xff08;二&#xff09;卷积层计算1.对输入数据的要求2.卷积核核心参数3.计算过程4.特征图尺寸计算5.1、多通道卷积计算5.2、多卷积核计算6.PyTorch卷积层API 前言&…

linux网络编程socket套接字

套接字概念 Socket本身有“插座”的意思&#xff0c;在Linux环境下&#xff0c;用于表示进程间网络通信的特殊文件类型。本质为内核借助缓冲区形成的伪文件。 既然是文件&#xff0c;那么理所当然的&#xff0c;我们可以使用文件描述符引用套接字。与管道类似的&#xff0c;L…

Python 数据分析与可视化 Day 5 - 数据可视化入门(Matplotlib Seaborn)

&#x1f3af; 今日目标 掌握 Matplotlib 的基本绘图方法&#xff08;折线图、柱状图、饼图&#xff09;掌握 Seaborn 的高级绘图方法&#xff08;分类图、分布图、箱线图&#xff09;熟悉图像美化&#xff08;标题、标签、颜色、风格&#xff09;完成一组学生成绩数据的可视化…

CephFS “Client Failing to Respond to Cache Pressure“ 告警分析

告警含义 当出现 Client failing to respond to cache pressure 警告时,表明: 元数据服务器 (MDS) 要求客户端释放缓存的元数据(如 inode Capabilities)客户端未能及时响应 释放请求核心触发机制 MDS 通过以下周期性流程管理缓存 阶段操作触发条件Cache Trim 周期每隔 mds…

生成式人工智能实战 | 生成对抗网络(Generative Adversarial Network, GAN)

生成式人工智能实战 | 生成对抗网络 0. 前言1. 生成对抗网络2. 模型构建2.1 生成器2.2 判别器 3. 模型训练3.1 数据加载3.2 训练流程 0. 前言 生成对抗网络 (Generative Adversarial Networks, GAN) 是一种由两个相互竞争的神经网络组成的深度学习模型&#xff0c;它由一个生成…

缓存与加速技术实践-MongoDB数据库应用

一.什么是MongoDB MongoDB 是一个文档型数据库&#xff0c;数据以类似 JSON 的文档形式存储。 MongoDB 的设计理念是为了应对大数据量、高性能和灵活性需求。 MongoDB 使用集合&#xff08;Collections&#xff09;来组织文档&#xff08;Documents&#xff09;&#xff0…

声网对话式AI把“答疑机器人”变成“有思维的助教”

作为一家专注初高中学生的线上教育平台&#xff0c;我们精心打磨的系统化课程收获了不少认可&#xff0c;但课后无人答疑的难题却始终横亘在前。学生课后遇到疑惑&#xff0c;要么只能默默憋在心里&#xff0c;要么就得苦苦等待下一节课&#xff0c;家长们也频繁抱怨 “花了钱&…

常见的排序方法

目录 1. 插入排序 2. 希尔排序 3. 选择排序 4. 堆排序 5. 冒泡排序 6. 快速排序 1. 快速排序的实现 1. 思路&#xff08;以从小到大排序为例&#xff09; 2. 选取基准元素的方法&#xff08;Hoare&#xff09; 3. 选取基准元素的方法&#xff08;挖坑法&#xff09; …

【matlab定位例程】基于AOA和TDOA混合的定位方法,背景为三维空间,自适应锚点数量,附下载链接

文章目录 代码概述代码功能概述核心算法原理AOA定位模型TDOA定位迭代算法混合定位策略关键技术创新 运行结果4个锚点的情况40个锚点的情况 MATLAB源代码 代码概述 代码功能概述 本代码实现了一种三维空间中的混合定位算法&#xff0c;结合到达角&#xff08; A O A AOA AOA&a…

专题:2025医疗AI应用研究报告|附200+份报告PDF汇总下载

原文链接&#xff1a;https://tecdat.cn/?p42748 本报告汇总解读聚焦医疗行业人工智能应用的前沿动态与市场机遇&#xff0c;以数据驱动视角剖析技术演进与商业落地的关键路径。从GenAI在医疗领域的爆发式增长&#xff0c;到细分场景的成熟度矩阵&#xff0c;再到运营成本压力…

推荐一个前端基于vue3.x,vite7.x,后端基于springboot3.4.x的完全开源的前后端分离的中后台管理系统基础项目(纯净版)

XHan Admin 简介 &#x1f389;&#x1f389; XHan Admin 是一个开箱即用的开源中后台管理系统基础解决方案&#xff0c; 项目为前后端分离架构。采用最新的技术栈全新构建&#xff0c;纯净的项目代码&#xff0c;没有历史包袱。 前端使用最新发布的 vite7.0 版本构建&#xf…

MySQL误删数据急救指南:基于Binlog日志的实战恢复详解

背景 数据误删是一个比较严重的场景 1.典型误操作场景 场景1&#xff1a;DELETE FROM orders WHERE status0 → 漏写AND create_time>‘2025-06-20’ 场景2&#xff1a;DROP TABLE customer → 误执行于生产环境 认识 binlog 1.binlog 的核心作用 记录所有 DDL/DML 操…

高效数据采集方案:快速部署与应用 AnyCrawl 网页爬虫工具实操指南

以下是对 AnyCrawl 的简单介绍&#xff1a; AnyCrawl 提供高性能网页数据爬取&#xff0c;其功能专为 LLM 集成和数据处理而设计支持利用搜索引擎直接查询获取结果内容&#xff0c;类似 searxng提供开发者友好的API&#xff0c;支持动态内容抓取&#xff0c;并输出结构化数据&…

vue3可以分页、搜索的select

下载 npm i v-selectpage基本使用 import { SelectPageList } from v-selectpage;<SelectPageListlanguage"zh-chs"key-prop"id"label-prop"name"fetch-data"fetchData" />const fetchData (data,callback) > {const { sea…

C# 入门学习教程 (一)

文章目录 一、解决方案与项目1. Solution 与 project 二、类与名称空间1.类与名称空间2.类库的引用1. DLL引用&#xff08;黑盒引用&#xff0c;无源代码&#xff09;2. Nuget 引用3. 项目引用&#xff08;白盒引用&#xff0c;有源代码&#xff09; 3.依赖关系 三、类&#xf…

76、单元测试-参数化测试

76、单元测试-参数化测试 参数化测试是一种单元测试技术&#xff0c;通过将测试数据与测试逻辑分离&#xff0c;使用不同的输入参数多次运行相同的测试用例&#xff0c;从而提高测试效率和代码复用性。 #### 基本原理 - **数据驱动测试**&#xff1a;将测试数据参数化&#xf…

SQL学习笔记3

SQL常用函数 1、字符串函数 函数调用的语法&#xff1a;select 函数&#xff08;参数); 常用的字符串函数有&#xff1a; 拼接字符串&#xff0c;将几个字符串拼到一起&#xff1a;concat (s1,s2,……); select concat(你好,hello); update mytable set wherefo concat(中…