Namespaces
Variants

std::filesystem:: u8path

From cppreference.net
定義先ヘッダ <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)
パスを表現する
(クラス)