C++标准 — C++17特性 — 文件系统 — path 路径处理

本文详细介绍了C++17中std::filesystem::path类的使用,涵盖路径分解、查询、拼接、修改、遍历和比较等核心功能。通过示例展示了如何处理和操作路径,包括对根目录、文件名、目录分隔符的处理,以及不同情况下的路径拼接规则。同时,还解释了路径对象的比较方式及其排序逻辑。
摘要由CSDN通过智能技术生成

C++标准 — C++17特性 — 文件系统 — path 路径处理


类型 path 的对象表示文件系统上的路径。只有路径的语法外观得到处理: 路径名可能表示不存在的路径,或甚至不允许存在于当前文件系统或操作系统的路径

路径名拥有下列语法:

  1. root-name(可选):标识具有多个根目录的文件系统(如 “C:” 或 “//myserver”)。有歧义的情况下,将组成合法根名的最长序列当做根名 。标准库可以在 OS API 所了解的根名外,定义额外的根名。
  2. root-directory(可选):目录分隔符,若存在,则标记此路径为绝对。若缺失(且异于根名的首元素是文件名),则路径为相对且要求另一路径作为解决此文件名的起始位置。
  3. 包括0个或多个下列语法:
  • file-name:不由目录分隔符或偏好目录分隔符组成的字符序列(操作系统或文件系统可能加上附加限制)。此名称可能标识一个文件、硬链接或目录。有两种特殊的文件名需要被识别: .(当前目录). .(上层目录)
  • directory-separators:正斜杠字符 / 或作为 path::preferred_separator 提供的另一种字符。若重复此字符,则它被处理成单个目录分隔符:/usr///lib/usr/lib 相同。

可以通过下列方法将路径标准化:

  1. 若路径为空,则停止(空路径的正常形式是空路径);
  2. 替换每个目录分隔符(可以由多重斜杠组成)为单个 path::preferred_separator
  3. 替换根目录名中的每个斜杠字符为 path::preferred_separator
  4. 移除每个 . 和紧随其后的目录分隔符;
  5. 移除每个非 . . 和其后紧随的目录分隔符和 . .
  6. 若存在根目录 ,则移除紧随其后的所有 . . 及任何目录分隔符 ;
  7. 如果最后的文件名是 . .,则移除尾部的所有目录分隔符;
  8. 如果目录为空,需要加上一个 .

一、分解

#include <iostream>
#include <filesystem>
using namespace std;
using namespace std::filesystem;

int main()
{
   
	path p("E:/Project/c++/main.cpp");
	cout << "path root name is : " << p.root_name() << endl;
	cout << "path root directory is : " << p.root_directory() << endl;
	cout << "path root path is : " << p.root_path() << endl;
	cout << "path relative path is : " << p.relative_path() << endl
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值