std::filesystem::u8path
STD::文件系统::u8path
Defined in header | | |
---|---|---|
template< class Source > path u8path( const Source& source | (1) | (since C++17) |
template< class InputIt > path u8path( InputIt first, InputIt last | (2) | (since C++17) |
构造路径p
的UTF-8编码序列char
S,作为std::string
,或std::string_view
,或作为以空结尾的多字节字符串,或作为。[首先,最后%29迭代器对。
- 如果
path::value_type
是char
而本机编码是utf-8,直接构造路径,就像path(source)
或path(first, last)
注意:这是使用Unicode(如Linux)的POSIX系统的典型情况。
- 否则,如果
path::value_type
是wchar_t
本机编码是utf-16%28--这是Windows%29上的情况,或者如果path::value_type
是char16_t
%28本机编码保证utf-16%29或char32_t
%28本机编码保证utf-32%29,然后首先将utf-8字符序列转换为临时字符串。tmp
类型path::string_type
然后新的路径被构造成path(tmp)
- 否则,对于非UTF-8窄字符编码和非UTF-16 wchar,则为%28。[医]t%29,首先将utf-8字符序列转换为临时的utf-32编码字符串。
tmp
类型std::u32string
,然后新路径被构造为path(tmp)
%28此路径是在具有非Unicode多字节或单字节编码的文件系统%29的POSIX系统上采取的。
参数
source | - | a UTF-8 encoded std::string, std::string_view, a pointer to a null-terminated multibyte string, or an input iterator with char value type that points to a null-terminated multibyte string |
---|---|---|
first, last | - | pair of InputIterators that specify a UTF-8 encoded character sequence |
类型要求
-输入必须符合输入器的要求。
-输入的值类型必须是字符
返回值
从UTF-8转换到文件系统%27 s本机字符编码后从输入字符串构造的路径。
例外
可抛filesystem_error
关于基础OS API错误或std::bad_alloc
如果内存分配失败。
注记
在本机路径格式与泛型路径格式%28不同的系统上,Windows或POSIX系统都不是这类OSes%29的示例,如果此函数的参数使用泛型格式,则将转换为本机。
例
二次
#include <cstdio>
#ifdef _MSC_VER
#include <io.h>
#include <fcntl.h>
#else
#include <locale>
#include <clocale>
#endif
#include <fstream>
#include <iostream>
#include <filesystem>
namespace fs = std::filesystem;
int main()
{
#ifdef _MSC_VER
_setmode(_fileno(stderr), _O_WTEXT
#else
std::setlocale(LC_ALL, ""
std::locale::global(std::locale("")
std::cout.imbue(std::locale()
std::wcerr.imbue(std::locale()
#endif
fs::path p = fs::u8path(u8"要らない.txt"
std::ofstream(p) << "File contents"; // Prior to LWG2676 uses operator string_type()
// on MSVC, where string_type is wstring, only
// works due to non-standard extension.
// Post-LWG2676 uses new fstream constructors
// native string representation can be used with OS APIs
if (std::FILE* f =
#ifdef _MSC_VER
_wfopen(p.c_str(), L"r")
#else
std::fopen(p.c_str(), "r")
#endif
)
{
int ch;
while((ch=fgetc(f))!= EOF) putchar(ch
std::fclose(f
}
// multibyte and wide representation can be used for output
std::cout << "\nFile name in narrow multibyte encoding: " << p.string() << '\n';
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
二次
另见
path (C++17) | represents a path (class) |
---|
© cppreference.com
在CreativeCommonsAttribution下授权-ShareAlike未移植许可v3.0。