std::experimental::filesystem:: u8path
|
헤더 파일에 정의됨
<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
참고 항목
|
경로를 나타냄
(클래스) |