std::filesystem::u8path
De cppreference.com
<tbody>
</tbody>
| 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_typeeschary la codificación nativa es UTF-8, construye una ruta de acceso directamente como si fuera porpath(source)opath(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_typeeswchar_ty la codificación nativa es UTF-16 (esta es el caso en Windows), o sipath::value_typeeschar16_t(se garantiza que la codificación nativa sea UTF-16) ochar32_t(se garantiza que la codificación nativa sea UTF-32), entonces primero convierte la secuencia de caracteres en UTF-8 a una cadena temporaltmpde tipopath::string_typey luego la nueva ruta de acceso se construye como si fuera porpath(tmp) - De lo contrario (para las secuencias de caracteres angostos que no son UTF-8 y para los
wchar_tque no son UTF-16), primero convierte la secuencia de caracteres en UTF-8 a una cadena temporal codificada en UTF-32tmpde tipostd::u32string, y luego la nueva ruta de acceso se construye como si fuera porpath(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).
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).
| ||
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.
Excepciones
Puede lanzar std::bad_alloc si la asignación de memoria fracasa.
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.
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
Véase también
(C++17) |
Representa una ruta de acceso. (clase) |