std::experimental::filesystem::u8path
Von cppreference.com
< cpp | experimental | fs | path
| Definiert im Header <experimental/filesystem> |
||
| template< class Source > path u8path( const Source& source ); |
(1) | (Dateisystem-TS) |
| template< class InputIt > path u8path( InputIt first, InputIt last ); |
(2) | (Dateisystem-TS) |
Konstruiert einen Pfad p aus einer UTF-8-kodierten Sequenz von chars, die entweder als std::string, als nullterminierter Multibyte-String oder als [first, last) Iterator-Paar bereitgestellt wird.
- Wenn
path::value_typeein 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, wenn
path::value_typeein wchar_t ist und die native Kodierung UTF-16 (dies ist die Situation unter Windows) ist, oder wennpath::value_typeein char16_t (native Kodierung garantiert UTF-16) oder char32_t (native Kodierung garantiert UTF-32) ist, dann wird zuerst 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 Narrow-Character-Kodierungen und für Nicht-UTF-16-
wchar_t) wird zuerst die UTF-8-Zeichensequenz in eine temporäre UTF-32-kodierte Zeichenkettetmpvom 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).
Inhalt |
[edit] Parameter
| source | - | Eine UTF-8-kodierte std::string, ein Zeiger auf einen nullterminierten Multibyte-String oder ein Eingabeiterator mit Zeichenwerttyp, der auf einen nullterminierten Multibyte-String zeigt. |
| first, last | - | Paar von LegacyInputIterators, die eine UTF-8-kodierte Zeichensequenz spezifizieren |
| Typanforderungen | ||
-InputIt muss die Anforderungen von LegacyInputIterator erfüllen. | ||
-Der Werttyp von InputIt muss char sein. | ||
[edit] Rückgabewert
Der aus dem Eingabe-String konstruierte Pfad nach der Konvertierung von UTF-8 in die native Zeichenkodierung des Dateisystems.
[edit] Ausnahmen
Kann filesystem_error bei Fehlern der zugrunde liegenden OS-API oder std::bad_alloc bei fehlgeschlagener Speicherzuweisung auslösen.
[edit] 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 das generische Format verwendet, in das native Format konvertiert.
[edit] Beispiel
Führen Sie diesen Code aus
#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"); // native string representation can be used with OS APIs std::ofstream(p) << "File contents"; // this uses operator string() if (std::FILE* f = std::fopen(p.c_str(), "r")) { int ch; while ((ch=fgetc(f))!= EOF) putchar(ch); std::fclose(f); } // multibyte and wide representation can be used for output 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); }
Mögliche Ausgabe
File contents File name in narrow multibyte encoding: 要らない.txt File name in wide encoding: 要らない.txt
[edit] Siehe auch
| repräsentiert einen Pfad (Klasse) |