Namespaces
Variants

std::experimental::filesystem:: u8path

From cppreference.net
헤더 파일에 정의됨 <experimental/filesystem>
template < class Source >
path u8path ( const Source & source ) ;
(1) (filesystem TS)
template < class InputIt >
path u8path ( InputIt first, InputIt last ) ;
(2) (filesystem TS)

UTF-8로 인코딩된 시퀀스로부터 경로 p 를 생성합니다. 시퀀스는 char s로 제공되며, std::string 으로, 또는 null로 종료된 멀티바이트 문자열로, 또는 [ first , last ) 반복자 쌍으로 공급될 수 있습니다.

  • 만약 path::value_type char 이고 기본 인코딩이 UTF-8인 경우, path ( source ) 또는 path ( first, last ) 처럼 직접 경로를 생성합니다. 참고: 이는 Linux와 같은 유니코드를 사용하는 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 ) 처럼 새로운 경로를 생성합니다(이는 유니코드가 아닌 멀티바이트 또는 싱글바이트 인코딩 파일 시스템을 가진 POSIX 시스템에서 선택되는 경로입니다).

목차

매개변수

source - UTF-8로 인코딩된 std::string , 널 종료 멀티바이트 문자열에 대한 포인터, 또는 널 종료 멀티바이트 문자열을 가리키는 char 값 타입을 갖는 입력 반복자
first, last - UTF-8로 인코딩된 문자 시퀀스를 지정하는 LegacyInputIterator s
타입 요구사항
-
InputIt LegacyInputIterator 요구사항을 충족해야 합니다.
-
InputIt 의 값 타입은 char 이어야 합니다.

반환값

입력 문자열에서 UTF-8에서 파일 시스템의 기본 문자 인코딩으로 변환 후 구성된 경로입니다.

예외

기본 OS API 오류 시 filesystem_error 를 throw할 수 있으며, 메모리 할당 실패 시 std:: bad_alloc 를 throw할 수 있습니다.

참고 사항

네이티브 경로 형식이 일반 경로 형식과 다른 시스템(Windows나 POSIX 시스템은 해당되지 않는 OS)에서, 이 함수의 인수가 일반 형식을 사용하는 경우 네이티브 형식으로 변환됩니다.

예제

#include <clocale>
#include <cstdio>
#include <experimental/filesystem>
#include <fstream>
#include <iostream>
namespace fs = std::experimental::filesystem;
int main()
{
    std::setlocale(LC_ALL, "en_US.utf8");
    std::locale::global(std::locale("en_US.utf8"));
    fs::path p = fs::u8path(u8"要らない.txt");
    // 네이티브 문자열 표현은 OS API와 함께 사용 가능
    std::ofstream(p) << "File contents"; // 이는 operator string()을 사용함
    if (std::FILE* f = std::fopen(p.c_str(), "r"))
    {
        int ch;
        while ((ch=fgetc(f))!= EOF) putchar(ch);
        std::fclose(f);
    }
    // 멀티바이트 및 와이드 표현은 출력에 사용 가능
    std::cout.imbue(std::locale());
    std::cout << "\nFile name in narrow multibyte encoding: "
              << p.string() << '\n';
    std::wcerr.imbue(std::locale());
    std::wcerr << "File name in wide encoding: "
               << p.wstring() << '\n';
    fs::remove(p);
}

가능한 출력:

File contents
File name in narrow multibyte encoding: 要らない.txt
File name in wide encoding: 要らない.txt

참고 항목

경로를 나타냄
(클래스)