Namespaces
Variants

std::experimental::filesystem:: u8path

From cppreference.net
Definido en el encabezado <experimental/filesystem>
template < class Source >
path u8path ( const Source & source ) ;
(1) (filesystem TS)
template < class InputIt >
path u8path ( InputIt first, InputIt last ) ;
(2) (filesystem TS)

Construye una ruta p a partir de una secuencia codificada en UTF-8 de char s, suministrada ya sea como un std::string , 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 directamente como si fuera mediante path ( source ) o path ( first, last ) . Nota: esta es la situación típica de un sistema POSIX que utiliza Unicode, como Linux.
  • En caso contrario, si path::value_type es wchar_t y la codificación nativa es UTF-16 (esta es la situación en Windows), o si path::value_type es char16_t (codificación nativa garantizada UTF-16) o char32_t (codificación nativa garantizada UTF-32), entonces primero convierte la secuencia de caracteres UTF-8 a una cadena temporal tmp de tipo path::string_type y luego la nueva ruta se construye como si fuera mediante path ( tmp ) .
  • En caso contrario (para codificaciones de caracteres estrechos no UTF-8 y para wchar_t no UTF-16), primero convierte la secuencia de caracteres UTF-8 a una cadena temporal codificada en UTF-32 tmp de tipo std:: u32string , y luego la nueva ruta se construye como si fuera mediante path ( tmp ) (esta ruta se toma en un sistema POSIX con un sistema de archivos codificado en multibyte o byte simple no Unicode).

Contenidos

Parámetros

source - una cadena std::string codificada en UTF-8, un puntero a una cadena multibyte terminada en nulo, o un iterador de entrada con tipo de valor char que apunta a una cadena multibyte terminada en nulo
first, last - par de LegacyInputIterator s que especifican una secuencia de caracteres codificada en UTF-8
Requisitos de tipo
-
InputIt debe cumplir con los requisitos de LegacyInputIterator .
-
El tipo de valor de InputIt debe ser char .

Valor de retorno

La ruta construida a partir de la cadena de entrada después de la conversión de UTF-8 a la codificación de caracteres nativa del sistema de archivos.

Excepciones

Puede lanzar filesystem_error en errores de API del sistema operativo subyacente o std:: bad_alloc si falla la asignación de memoria.

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 para esta función está utilizando formato genérico, será convertido a nativo.

Ejemplo

#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");
    // la representación de cadena nativa puede usarse con APIs del sistema operativo
    std::ofstream(p) << "File contents"; // esto usa operator string()
    if (std::FILE* f = std::fopen(p.c_str(), "r"))
    {
        int ch;
        while ((ch=fgetc(f))!= EOF) putchar(ch);
        std::fclose(f);
    }
    // las representaciones multibyte y wide pueden usarse para salida
    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);
}

Salida posible:

File contents
File name in narrow multibyte encoding: 要らない.txt
File name in wide encoding: 要らない.txt

Véase también

representa una ruta
(clase)