Namespaces
Variants

std::filesystem::path:: path

From cppreference.net
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 系统上不发生转换)。
  • 若源字符类型为 char8_t ,则使用从 UTF-8 到本地文件系统编码的转换。
(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 类型不同,且满足以下任一条件时参与重载决议:

目录

参数

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字符串生成可移植路径名,请参阅 u8path

(C++20前)

当源为 char8_t 序列时, path 构造函数支持从UTF-8字符串创建路径。

(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 对象
(函数)