std::filesystem::u8path
De cppreference.com
< cpp | filesystem | path
Definido en el archivo de encabezado <filesystem>
|
||
template< class Source > std::filesystem::path u8path( const Source& source ); |
(1) | (desde C++17) (en desuso en C++20) |
template< class InputIt > std::filesystem::path u8path( InputIt first, InputIt last ); |
(2) | (desde C++17) (en desuso en C++20) |
Construye una ruta de acceso p
de una secuencia codificada en UTF-8 de chars o char8_ts (desde C++20), suministrada ya sea como std::string, o como std::string_view, o como una cadena multibyte terminada en nulo, o como un par de iteradores [first, last).
- Si
path::value_type
es char y la codificación nativa es UTF-8, construye una ruta de acceso directamente como si fuera por path(source) o path(first, last). Nota: esta es la situación típica de un sistema POSIX que usa Unicode, como Linux. - De lo contrario, si
path::value_type
es wchar_t y la codificación nativa es UTF-16 (esta es el caso en Windows), o sipath::value_type
es char16_t (se garantiza que la codificación nativa sea UTF-16) o char32_t (se garantiza que la codificación nativa sea UTF-32), entonces primero convierte la secuencia de caracteres en UTF-8 a una cadena temporaltmp
de tipopath::string_type
y luego la nueva ruta de acceso se construye como si fuera por path(tmp) - De lo contrario (para las secuencias de caracteres angostos que no son UTF-8 y para los wchar_t que no son UTF-16), primero convierte la secuencia de caracteres en UTF-8 a una cadena temporal codificada en UTF-32
tmp
de tipo std::u32string, y luego la nueva ruta de acceso se construye como si fuera por path(tmp) (esta ruta de acceso se toma en un sistema POSIX con un sistema de archivos no-Unicode multibyte o un sistema de archivos de un solo byte codificado).
Contenido |
[editar] Parámetros
source | - | Un objeto std::string codificado en UTF-8, std::string_view, un puntero una cadena multibyte terminada en nulo, o un iterador de entrada con su tipo valor que apunta a una cadena multibyte terminada en nulo. |
first, last | - | Un par de InputIterators que especifican una secuencia de caracteres codificada en UTF-8. |
Requisitos de tipo | ||
-InputIt debe satisfacer los requisitos de InputIterator.
| ||
-El tipo valor de Source o InputIt debe ser char o char8_t (desde C++20).
|
[editar] Valor de retorno
La ruta de acceso construida de la cadena de entrada después de la conversión de UTF-8 a la codificación nativa del sistema de archivos.
[editar] Excepciones
Puede lanzar std::bad_alloc si la asignación de memoria fracasa.
[editar] Notas
En sistemas donde el formato de ruta nativo difiere del formato de ruta genérico (ni los sistemas Windows ni POSIX son ejemplos de tales sistemas operativos), si el argumento de esta función está usando un formato genérico, se convertirá a nativo.
[editar] Ejemplo
Ejecuta este código
#include <cstdio> #ifdef _MSC_VER #include <io.h> #include <fcntl.h> #else #include <locale> #include <clocale> #endif #include <fstream> #include <filesystem> 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"; // Antes de LWG2676 usa operador string_type() // en MSVC, donde string_type es wstring; solo // funciona debido a extensión no estándar. // Posterior a LWG2676 usa nuevos constructores de fstream // la representación de cadena nativa puede usarse con las API del SO 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); } std::filesystem::remove(p); }
Posible salida:
Contenido del archivo
[editar] Véase también
(C++17) |
Representa una ruta de acceso. (clase) |