std::filesystem:: u8path
|
定義先ヘッダ
<filesystem>
|
||
|
template
<
class
Source
>
std:: filesystem :: path u8path ( const Source & source ) ; |
(1) |
(C++17以降)
(C++20で非推奨) |
|
template
<
class
InputIt
>
std:: filesystem :: path u8path ( InputIt first, InputIt last ) ; |
(2) |
(C++17以降)
(C++20で非推奨) |
UTF-8エンコードされた
char
シーケンスからパス
p
を構築します。シーケンスは
std::string
、または
std::string_view
、またはヌル終端マルチバイト文字列、または
[
first, last
)
イテレータペアとして提供されます。
または
char8_t
シーケンス
(C++20以降)
。
-
path::value_typeが char でネイティブエンコーディングが UTF-8 の場合、 path ( source ) または path ( first, last ) によって直接パスを構築します。注記:これは Linux などの Unicode を使用する POSIX システムの典型的な状況です。 -
それ以外の場合、
path::value_typeが wchar_t でネイティブエンコーディングが UTF-16(Windows での状況)の場合、またはpath::value_typeが char16_t (ネイティブエンコーディングが UTF-16 保証)または char32_t (ネイティブエンコーディングが UTF-32 保証)の場合、まず UTF-8 文字シーケンスをpath::string_type型の一時文字列tmpに変換し、その後 path ( tmp ) によって新しいパスを構築します。 -
それ以外の場合(非 UTF-8 ナロー文字エンコーディングおよび非 UTF-16
wchar_t
の場合)、まず UTF-8 文字シーケンスを
std::
u32string
型の一時的な UTF-32 エンコード文字列
tmpに変換し、その後 path ( tmp ) によって新しいパスを構築します(このパスは、非 Unicode のマルチバイトまたはシングルバイトエンコードファイルシステムを使用する POSIX システムで採用されます)。
目次 |
パラメータ
| source | - | UTF-8エンコードされた std::string 、 std::string_view 、ヌル終端マルチバイト文字列へのポインタ、またはヌル終端マルチバイト文字列を指すchar値型の入力イテレータ |
| first, last | - | UTF-8エンコードされた文字シーケンスを指定する LegacyInputIterator s のペア |
| 型要件 | ||
-
InputIt
は
LegacyInputIterator
の要件を満たさなければならない。
|
||
-
Source
または
InputIt
の値型は
char
または
char8_t
でなければならない。
(C++20以降)
|
||
戻り値
入力文字列をUTF-8からファイルシステムのネイティブ文字エンコーディングに変換した後に構築されるパス。
例外
メモリ確保が失敗した場合、 std::bad_alloc をスローする可能性があります。
注記
ネイティブパス形式が汎用パス形式と異なるシステムでは(WindowsシステムもPOSIXシステムもそのようなOSの例ではありません)、この関数への引数が汎用形式を使用している場合、ネイティブ形式に変換されます。
例
#include <cstdio> #ifdef _MSC_VER #include <fcntl.h> #include <io.h> #else #include <clocale> #include <locale> #endif #include <filesystem> #include <fstream> int main() { #ifdef _MSC_VER _setmode(_fileno(stderr), _O_WTEXT); #else std::setlocale(LC_ALL, ""); std::locale::global(std::locale("")); #endif std::filesystem::path p(u8"要らない.txt"); std::ofstream(p) << "File contents"; // LWG2676以前はoperator string_type()を使用 // MSVCではstring_typeがwstringであり、 // 非標準拡張機能によってのみ動作 // LWG2676以降は新しいfstreamコンストラクタを使用 // ネイティブ文字列表現はOS固有のAPIで使用可能 #ifdef _MSC_VER if (std::FILE* f = _wfopen(p.c_str(), L"r")) #else if (std::FILE* f = std::fopen(p.c_str(), "r")) #endif { for (int ch; (ch = fgetc(f)) != EOF; std::putchar(ch)) {} std::fclose(f); } std::filesystem::remove(p); }
出力例:
File contents
関連項目
|
(C++17)
|
パスを表現する
(クラス) |