Namespaces
Variants

std::experimental::filesystem:: u8path

From cppreference.net
Défini dans l'en-tête <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)

Construit un chemin p à partir d'une séquence encodée en UTF-8 de char s, fournie soit sous forme de std::string , soit sous forme de chaîne multioctet terminée par un caractère nul, soit sous forme de paire d'itérateurs [ first , last ).

  • Si path::value_type est char et que l'encodage natif est UTF-8, construit un chemin directement comme par path ( source ) ou path ( first, last ) . Remarque : c'est la situation typique d'un système POSIX utilisant Unicode, tel que Linux.
  • Sinon, si path::value_type est wchar_t et que l'encodage natif est UTF-16 (c'est le cas sous Windows), ou si path::value_type est char16_t (encodage natif garanti UTF-16) ou char32_t (encodage natif garanti UTF-32), alors convertit d'abord la séquence de caractères UTF-8 en une chaîne temporaire tmp de type path::string_type puis le nouveau chemin est construit comme par path ( tmp ) .
  • Sinon (pour les encodages de caractères étroits non UTF-8 et pour wchar_t non UTF-16), convertit d'abord la séquence de caractères UTF-8 en une chaîne encodée UTF-32 temporaire tmp de type std:: u32string , puis le nouveau chemin est construit comme par path ( tmp ) (ce chemin est emprunté sur un système POSIX avec un système de fichiers encodé en multioctets ou mono-octet non-Unicode).

Table des matières

Paramètres

source - un std::string encodé en UTF-8, un pointeur vers une chaîne de caractères multioctets terminée par un caractère nul, ou un itérateur d'entrée avec un type de valeur char qui pointe vers une chaîne de caractères multioctets terminée par un caractère nul
first, last - paire d' LegacyInputIterator s qui spécifient une séquence de caractères encodée en UTF-8
Exigences de type
-
InputIt doit satisfaire aux exigences d' LegacyInputIterator .
-
Le type de valeur de InputIt doit être char .

Valeur de retour

Le chemin construit à partir de la chaîne d'entrée après conversion de l'UTF-8 vers l'encodage de caractères natif du système de fichiers.

Exceptions

Peut lever filesystem_error en cas d'erreurs de l'API système sous-jacente ou std:: bad_alloc si l'allocation de mémoire échoue.

Notes

Sur les systèmes où le format de chemin natif diffère du format de chemin générique (ni les systèmes Windows ni les systèmes POSIX ne sont des exemples de tels OS), si l'argument de cette fonction utilise le format générique, il sera converti en natif.

Exemple

#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 représentation native de la chaîne peut être utilisée avec les API du système d'exploitation
    std::ofstream(p) << "File contents"; // ceci utilise operator string()
    if (std::FILE* f = std::fopen(p.c_str(), "r"))
    {
        int ch;
        while ((ch=fgetc(f))!= EOF) putchar(ch);
        std::fclose(f);
    }
    // les représentations multi-octets et larges peuvent être utilisées pour la sortie
    std::cout.imbue(std::locale());
    std::cout << "\nNom du fichier en encodage multi-octets étroit : "
              << p.string() << '\n';
    std::wcerr.imbue(std::locale());
    std::wcerr << "Nom du fichier en encodage large : "
               << p.wstring() << '\n';
    fs::remove(p);
}

Sortie possible :

File contents
Nom du fichier en encodage multi-octets étroit : 要らない.txt
Nom du fichier en encodage large : 要らない.txt

Voir aussi

représente un chemin
(classe)