std::filesystem::path:: path
From cppreference.net
<
cpp
|
filesystem
|
path
|
path
(
)
noexcept
;
|
(1) | (自 C++17 起) |
|
path
(
const
path
&
p
)
;
|
(2) | (自 C++17 起) |
|
path
(
path
&&
p
)
noexcept
;
|
(3) | (自 C++17 起) |
|
path
(
string_type
&&
source, format fmt
=
auto_format
)
;
|
(4) | (自 C++17 起) |
|
template
<
class
Source
>
path ( const Source & source, format fmt = auto_format ) ; |
(5) | (自 C++17 起) |
|
template
<
class
InputIt
>
path ( InputIt first, InputIt last, format fmt = auto_format ) ; |
(6) | (自 C++17 起) |
|
template
<
class
Source
>
path ( const Source & source, const std:: locale & loc, format fmt = auto_format ) ; |
(7) | (自 C++17 起) |
|
template
<
class
InputIt
>
path ( InputIt first, InputIt last, const std:: locale & loc, format fmt = auto_format ) ; |
(8) | (自 C++17 起) |
构造一个新的
path
对象。
1)
构造一个空路径。
2)
拷贝构造函数。构造一个路径,其路径名(包括原生格式和通用格式)与
p
相同。
3)
移动构造函数。构造一个路径,其路径名(包括原生格式和通用格式)与
p
相同,
p
将处于有效但未指定的状态。
4-6)
从字符序列构造路径(格式按照
fmt
指定解析),该序列由
source
提供
(4,5)
——可以是指向空终止字符/宽字符序列的指针或输入迭代器、
std::basic_string
或
std::basic_string_view
,或以输入迭代器对 [
first
,
last
) 表示
(6)
。允许使用字符类型
char
、
char8_t
、
(C++20 起)
char16_t
、
char32_t
、
wchar_t
,转换到本地字符集的方法取决于
source
使用的字符类型。
-
- 若源字符类型为 char ,则假定源编码为本地窄编码(因此在 POSIX 系统上不发生转换)。
|
(C++20 起) |
-
- 若源字符类型为 char16_t ,则使用从 UTF-16 到本地文件系统编码的转换。
- 若源字符类型为 char32_t ,则使用从 UTF-32 到本地文件系统编码的转换。
- 若源字符类型为 wchar_t ,则假定输入为本地宽编码(因此在 Windows 上不发生转换)。
7,8)
从字符序列构造路径(格式按照
fmt
指定的方式解释),该序列由
source
提供
(7)
——可以是指向空终止字符序列的指针或输入迭代器,也可以是
std::string
、
std::string_view
,或表示为输入迭代器对 [
first
,
last
)
(8)
。唯一允许的字符类型是
char
。使用
loc
执行字符编码转换。若
value_type
为
wchar_t
,则使用
std::
codecvt
<
wchar_t
,
char
,
std::
mbstate_t
>
语言环境 facet 转换为宽字符。否则,先使用
std::
codecvt
<
wchar_t
,
char
,
std::
mbstate_t
>
facet 转换为宽字符,再使用
std::
codecvt
<
wchar_t
,value_type
>
语言环境 facet 转换为文件系统原生字符类型。
(5)
和
(7)
仅在
Source
与
path
类型不同,且满足以下任一条件时参与重载决议:
-
Source是 std::basic_string 或 std::basic_string_view 的特化,或 - std:: iterator_traits < std:: decay_t < Source >> :: value_type 有效且表示可能为 const 限定的编码字符类型( char 、 char8_t 、 (C++20 起) char16_t 、 char32_t 或 wchar_t )。
目录 |
参数
| p | - | 要复制的路径 |
| source | - | std::basic_string 、 std::basic_string_view 、指向空终止字符字符串的指针,或指向空终止字符序列的字符值类型输入迭代器(对于重载 (7) ,字符类型必须为 char ) |
| first, last | - | 指定字符序列的 LegacyInputIterator s 对 |
| fmt | - | path::format 类型的枚举值,指定如何解释路径名格式 |
| loc | - | 定义要使用的编码转换的区域设置 |
| 类型要求 | ||
-
InputIt
必须满足
LegacyInputIterator
的要求。
|
||
-
InputIt
的值类型必须为字符类型之一:
char
、
wchar_t
、
char8_t
、
(C++20 起)
char16_t
和
char32_t
,以使用重载
(6)
。
|
||
-
InputIt
的值类型必须为
char
,以使用重载
(8)
。
|
||
异常
2,4-8)
可能抛出实现定义的异常。
备注
|
关于从Unicode字符串生成可移植路径名,请参阅
|
(C++20前) |
|
当源为
char8_t
序列时,
|
(C++20起) |
示例
运行此代码
#include <filesystem> #include <iostream> namespace fs = std::filesystem; int main() { fs::path p1 = "/usr/lib/sendmail.cf"; // 可移植格式 fs::path p2 = "C:\\users\\abcdef\\AppData\\Local\\Temp\\"; // 原生格式 fs::path p3 = U"D:/猫.txt"; // UTF-32 字符串 fs::path p4 = u8"~/狗.txt"; // UTF-8 字符串 std::cout << "p1 = " << p1 << '\n' << "p2 = " << p2 << '\n' << "p3 = " << p3 << '\n' << "p4 = " << p4 << '\n'; }
输出:
p1 = "/usr/lib/sendmail.cf" p2 = "C:\\users\\abcdef\\AppData\\Local\\Temp\\" p3 = "D:/猫.txt" p4 = "~/狗.txt"
缺陷报告
以下行为变更缺陷报告被追溯应用于先前发布的C++标准。
| 缺陷报告 | 适用范围 | 发布时行为 | 正确行为 |
|---|---|---|---|
| LWG 3244 | C++17 |
缺失
Source
不能是
path
的约束条件
|
已添加 |
参见
|
(C++17)
(C++20 中已弃用)
|
从 UTF-8 编码源创建
path
对象
(函数) |