Espacios de nombres
Variantes
Acciones

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 si path::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 temporal tmp de tipo path::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

#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) [editar]