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
の場合、
loc
の
std::
codecvt
<
wchar_t
,
char
,
std::
mbstate_t
>
ファセットを使用してワイド文字に変換します。それ以外の場合は、まず
std::
codecvt
<
wchar_t
,
char
,
std::
mbstate_t
>
ファセットを使用してワイド文字に変換し、その後
loc
の
std::
codecvt
<
wchar_t
,value_type
>
ファセットを使用してファイルシステムのネイティブ文字型に変換します。
(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 のペア |
| fmt | - | パス名フォーマットの解釈方法を指定する path::format 型の列挙子 |
| loc | - | 使用するエンコーディング変換を定義するロケール |
| 型要件 | ||
-
InputIt
は
LegacyInputIterator
の要件を満たさなければならない。
|
||
-
InputIt
の値型は、オーバーロード
(6)
を使用するために、文字型
char
,
wchar_t
,
char8_t
,
(C++20以降)
char16_t
および
char32_t
のいずれかでなければならない。
|
||
-
InputIt
の値型は、オーバーロード
(8)
を使用するために
char
でなければならない。
|
||
例外
2,4-8)
実装定義の例外をスローする可能性があります。
注記
|
Unicode文字列からの移植可能なパス名生成については、
|
(C++20まで) |
|
|
(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++規格に対して遡及的に適用されました。
| DR | 適用対象 | 公開時の動作 | 正しい動作 |
|---|---|---|---|
| LWG 3244 | C++17 |
Source
が
path
であってはならないという制約が欠落していた
|
追加された |
関連項目
|
(C++17)
(deprecated in C++20)
|
UTF-8エンコードされたソースから
path
を作成する
(関数) |