C++ 参考手册
- C++11
- C++14
- C++17
- C++20
- C++ 编译器支持情况表
- 独立与宿主实现
- C++ 语言
- C++ 关键词
- 预处理器
- C++ 标准库头文件
- 具名要求
- 功能特性测试 (C++20)
- 工具库
- 类型支持(基本类型、RTTI、类型特性)
- 概念库 (C++20)
- 错误处理
- 动态内存管理
- 日期和时间工具
- 字符串库
- 容器库
- 迭代器库
- 范围库 (C++20)
- 算法库
- 数值库
- 输入/输出库
- 文件系统库
- std::filesystem::path
- std::filesystem::file_time_type
- std::filesystem::path::empty
- std::filesystem::u8path
- std::filesystem::filesystem_error
- std::filesystem::directory_entry
- std::filesystem::directory_iterator
- std::filesystem::recursive_directory_iterator
- std::filesystem::file_status
- std::filesystem::space_info
- std::filesystem::file_type
- std::filesystem::perms
- std::filesystem::perm_options
- std::filesystem::copy_options
- std::filesystem::directory_options
- std::filesystem::absolute
- std::filesystem::canonical, std::filesystem::weakly_canonical
- std::filesystem::relative, std::filesystem::proximate
- std::filesystem::copy
- std::filesystem::copy_file
- std::filesystem::copy_symlink
- std::filesystem::create_directory, std::filesystem::create_directories
- std::filesystem::create_hard_link
- std::filesystem::create_symlink, std::filesystem::create_directory_symlink
- std::filesystem::current_path
- std::filesystem::exists
- std::filesystem::equivalent
- std::filesystem::file_size
- std::filesystem::hard_link_count
- std::filesystem::last_write_time
- std::filesystem::permissions
- std::filesystem::read_symlink
- std::filesystem::remove, std::filesystem::remove_all
- std::filesystem::rename
- std::filesystem::resize_file
- std::filesystem::space
- std::filesystem::status, std::filesystem::symlink_status
- std::filesystem::temp_directory_path
- std::filesystem::is_block_file
- std::filesystem::is_character_file
- std::filesystem::is_directory
- std::filesystem::is_empty
- std::filesystem::status_known
- std::filesystem::is_fifo
- std::filesystem::is_other
- std::filesystem::is_regular_file
- std::filesystem::is_socket
- std::filesystem::is_symlink
- 注释
- 本地化库
- 正则表达式库
- 原子操作库
- 线程支持库
- 实验性 C++ 特性
- 有用的资源
- 索引
- std 符号索引
- 协程支持 (C++20)
- C++ 关键词
std::filesystem::path
定义于头文件 <filesystem>
|
||
class path; |
(C++17 起) | |
类型 path
的对象表示文件系统上的路径。只有路径的语法外观得到处理:路径名可能表示不存在的路径,或甚至不允许存在于当前文件系统或操作系统的路径。
路径名拥有下列语法:
- 根名(可选) :标识具有多根的文件系统(如 "C:" 或 "//myserver" )的根。有歧义的情况下,将组成合法 根名 的最长序列当做 根名 。标准库可以在 OS API 所了解的 根名 外,定义额外的 根名 。
- 根目录(可选) :目录分隔符,若存在,则标记此路径为绝对。若缺失(且异于根名的首元素是文件名),则路径为相对且要求另一路径作为解决此文件名的起始位置。
- 零或多个下列者:
- 文件名 :不由目录分隔符或偏好目录分隔符组成的字符序列(操作系统或文件系统可能加上附加限制)。此名称可能标识一个文件、硬链接或目录。辨别二种特殊的 文件名 :
- 点 :由单个点字符 . 构成的文件名是指代当前目录的目录名
- 点点 :由二个点字符 .. 构成的文件名是指代亲目录的目录名。
- 目录分隔符 :正斜杠字符 / 或作为
path::preferred_separator
提供的另一种字符。若重复此字符,则它被处理成单个目录分隔符: /usr///////lib 与 /usr/lib 相同
路径能以下列算法正常化:
- 若路径为空,则停止(空路径的正常形式是空路径)
- 替换每个 目录分隔符 (可以由多重斜杠组成)为单个
path::preferred_separator
。 - 替换 根名 中的每个斜杠字符为
path::preferred_separator
。 - 移除每个 点 和立即后随的 目录分隔符 。
- 移除每个立即后随 目录分隔符 和一个 点点 的非 点点 文件名,还有立即跟随的 目录分隔符 。
- 若存在 根目录 ,则移除立即跟随它们的所有 点点 及任何 目录分隔符 。
- 若最终文件名是 点点 ,则移除任何尾随的 目录分隔符 。
- 若路径为空,则添加一个 点 ( ./ 的正常形式是 . )
路径可由 begin() 与 end() 函数返回的迭代器逐元素遍历,这会以通用格式查看路径,并在根名、根目录及后继文件名元素上迭代(跳过目录分隔符,除了标识根目录者)。若路径中的最后元素是目录分隔符,则最后的迭代器将解引用为空元素。
调用任何的 path
非 const 成员函数会令所有引用该对象元素的迭代器非法。
若 OS 使用异于上述可移植通用语法的原生语法,则库函数被定义为接受“受检测格式”,以接受两种格式的路径名:当且仅当受检测格式匹配通用格式,但不为操作系统作为原生路径接受,才采用受检测格式参数。原生格式在目录路径名和文件路径名有别的 OS 上,若通用路径名以目录分隔符终止,则将它当做目录路径,否则当做常规文件。
任何情况下, path 类表型如同它以原生格式存储路径名,并自动于所需场合转换它为通用格式(每个成员函数都指定它转译的路径格式)
POSIX 系统上,通用格式就是原生格式,并且没有必要区别或转换它们。
路径可隐式转换自及转换成 std::basic_string ,这使得在文件 API 上使用它们可行,例如作为到 std::ifstream::open 的参数
成员类型与常量
类型 | 定义 | ||||||||||
value_type
|
文件系统原生编码所用的字符类型: POSIX 上为 char , Windows 上为 wchar_t | ||||||||||
string_type
|
std::basic_string<value_type> | ||||||||||
const_iterator
|
value_type 为 path 的常遗留双向迭代器 (LegacyBidirectionalIterator)
| ||||||||||
iterator
|
const_iterator 的别名
| ||||||||||
确定如何转译路径名的字符串表示
亦定义下列枚举项:
(枚举) |
成员常量
constexpr value_type preferred_separator [静态] |
在可移植的 / 之外可用的另一种目录分隔符。 Windows 上它是反斜杠字符 \ 。 POSIX 上它是与可移植分隔符相同的斜杠 / (公开静态成员常量) |
成员函数
构造一个 path (公开成员函数) | |
销毁 path 对象 (公开成员函数) | |
赋值另一个路径 (公开成员函数) | |
赋值内容 (公开成员函数) | |
连接 | |
添加元素到带目录分隔符的路径 (公开成员函数) | |
连接二个路径而不加入目录分隔符 (公开成员函数) | |
修改器 | |
擦除内容 (公开成员函数) | |
转换目录分隔符为偏好的目录分隔符 (公开成员函数) | |
移除文件名路径组分 (公开成员函数) | |
以另一路径替换最末的路径组分 (公开成员函数) | |
替换扩展名 (公开成员函数) | |
交换两个路径 (公开成员函数) | |
格式观察器 | |
返回路径的原生版本 (公开成员函数) | |
返回转换到字符串的原生路径名格式 (公开成员函数) | |
返回转换到字符串的通用路径名格式 (公开成员函数) | |
比较 | |
以字典序比较二个路径的字典表示 (公开成员函数) | |
生成 | |
转换路径到正常形式 转换路径到相对形式 转换路径到准确形式 (公开成员函数) | |
分解 | |
若存在则返回路径的根名 (公开成员函数) | |
若存在则返回路径的根目录 (公开成员函数) | |
若存在则返回路径的根路径 (公开成员函数) | |
返回相对根路径的路径 (公开成员函数) | |
返回亲路径的路径 (公开成员函数) | |
返回文件名路径组分 (公开成员函数) | |
返回主干路径组分 (公开成员函数) | |
返回文件扩展名路径组分 (公开成员函数) | |
查询 | |
检查路径是否为空 (公开成员函数) | |
检查对应路径元素是否非空 (公开成员函数) | |
检查 root_path() 是否唯一标识文件系统位置 (公开成员函数) | |
迭代器 | |
访问作为元素序列的路径的迭代器 (公开成员函数) |
非成员函数
交换二个路径 (函数) | |
计算路径对象的哈希值 (函数) | |
(C++20 前)(C++20 前)(C++20 前)(C++20 前)(C++20 前)(C++20) |
以字典序比较二个路径 (函数) |
用目录分隔符连接二个路径 (函数) | |
进行路径上的流输入及输出 (函数) | |
(C++17)(C++20 中弃用) |
从 UTF-8 编码的源创建 path (函数) |