std::filesystem:: u8path
|
Definiert im Header
<filesystem>
|
||
|
template
<
class
Source
>
std:: filesystem :: path u8path ( const Source & source ) ; |
(1) |
(seit C++17)
(veraltet in C++20) |
|
template
<
class
InputIt
>
std:: filesystem :: path u8path ( InputIt first, InputIt last ) ; |
(2) |
(seit C++17)
(veraltet in C++20) |
Konstruiert einen Pfad
p
aus einer UTF-8-kodierten Sequenz von
char
s
oder
char8_t
s
(seit C++20)
, bereitgestellt entweder als
std::string
, oder als
std::string_view
, oder als nullterminierter Multibyte-String, oder als
[
first, last
)
Iterator-Paar.
-
Falls
path::value_typegleich char ist und die native Kodierung UTF-8 ist, wird ein Pfad direkt konstruiert, als ob durch path ( source ) oder path ( first, last ) . Hinweis: Dies ist die typische Situation eines POSIX-Systems, das Unicode verwendet, wie z.B. Linux. -
Andernfalls, falls
path::value_typegleich wchar_t ist und die native Kodierung UTF-16 ist (dies ist die Situation unter Windows), oder fallspath::value_typegleich char16_t ist (native Kodierung garantiert UTF-16) oder char32_t (native Kodierung garantiert UTF-32), dann wird zunächst die UTF-8-Zeichensequenz in eine temporäre Zeichenkettetmpvom Typpath::string_typekonvertiert und dann der neue Pfad konstruiert, als ob durch path ( tmp ) . -
Andernfalls (für nicht-UTF-8-Schmalzeichenkodierungen und für nicht-UTF-16
wchar_t
) wird zunächst die UTF-8-Zeichensequenz in eine temporäre UTF-32-kodierte Zeichenkette
tmpvom Typ std:: u32string konvertiert, und dann der neue Pfad konstruiert, als ob durch path ( tmp ) (dieser Pfad wird auf einem POSIX-System mit einem nicht-Unicode-Multibyte- oder Single-Byte-kodierten Dateisystem eingeschlagen).
Inhaltsverzeichnis |
Parameter
| source | - | eine UTF-8-kodierte std::string , std::string_view , ein Zeiger auf eine nullterminierte Multibyte-Zeichenkette oder ein Eingabeiterator mit char-Werttyp, der auf eine nullterminierte Multibyte-Zeichenkette zeigt |
| first, last | - | ein Paar von LegacyInputIterator s , die eine UTF-8-kodierte Zeichensequenz spezifizieren |
| Typanforderungen | ||
-
InputIt
muss die Anforderungen von
LegacyInputIterator
erfüllen.
|
||
-
Source
oder
InputIt
muss
char
oder
char8_t
sein.
(seit C++20)
|
||
Rückgabewert
Der aus der Eingabezeichenkette konstruierte Pfad nach der Konvertierung von UTF-8 in die native Zeichenkodierung des Dateisystems.
Ausnahmen
Kann std::bad_alloc werfen, wenn die Speicherallokation fehlschlägt.
Hinweise
Auf Systemen, bei denen das native Pfadformat vom generischen Pfadformat abweicht (weder Windows- noch POSIX-Systeme sind Beispiele für solche Betriebssysteme), wird das Argument dieser Funktion, falls es im generischen Format vorliegt, in das native Format konvertiert.
Beispiel
#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"; // Vor LWG2676 verwendet operator string_type() // auf MSVC, wo string_type wstring ist, funktioniert // nur aufgrund nicht standardkonformer Erweiterung. // Nach LWG2676 verwendet neue fstream-Konstruktoren // Native String-Darstellung kann mit betriebssystemspezifischen APIs verwendet werden #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); }
Mögliche Ausgabe:
File contents
Siehe auch
|
(C++17)
|
repräsentiert einen Pfad
(Klasse) |