Namespaces
Variants

std::filesystem:: filesystem_error

From cppreference.net
Défini dans l'en-tête <filesystem>
class filesystem_error ;
(depuis C++17)

La classe std::filesystem::filesystem_error définit un objet d'exception qui est levé en cas d'échec par les surcharges levant des exceptions des fonctions de la bibliothèque de système de fichiers.

cpp/error/exception cpp/error/runtime error cpp/error/system error std-filesystem-filesystem error-inheritance.svg

Diagramme d'héritage

Table des matières

Fonctions membres

construit l'objet d'exception
(fonction membre publique)
remplace l'objet d'exception
(fonction membre publique)
retourne les chemins impliqués dans l'opération ayant causé l'erreur
(fonction membre publique)
retourne la chaîne explicative
(fonction membre publique)

Hérité de std:: system_error

Fonctions membres

retourne le code d'erreur
(fonction membre publique de std::system_error )
[virtual]
retourne une chaîne explicative
(fonction membre publique virtuelle de std::system_error )

Hérité de std:: exception

Fonctions membres

[virtual]
détruit l'objet exception
(fonction membre publique virtuelle de std::exception )
[virtual]
retourne une chaîne explicative
(fonction membre publique virtuelle de std::exception )

Notes

Afin de garantir que les fonctions de copie de filesystem_error soient noexcept, les implémentations typiques stockent un objet contenant la valeur de retour de what() et deux objets std::filesystem::path référencés respectivement par path1() et path2() dans un stockage à comptage de références alloué séparément.

Actuellement, l' implémentation MS STL n'est pas conforme : les objets mentionnés ci-dessus sont stockés directement dans l'objet filesystem , ce qui rend les fonctions de copie non noexcept.

Exemple

#include <filesystem>
#include <iostream>
#include <system_error>
int main()
{
    const std::filesystem::path from{"/none1/a"}, to{"/none2/b"};
    try
    {
        std::filesystem::copy_file(from, to); // lève une exception : les fichiers n'existent pas
    }
    catch (std::filesystem::filesystem_error const& ex)
    {
        std::cout << "what():  " << ex.what() << '\n'
                  << "path1(): " << ex.path1() << '\n'
                  << "path2(): " << ex.path2() << '\n'
                  << "code().value():    " << ex.code().value() << '\n'
                  << "code().message():  " << ex.code().message() << '\n'
                  << "code().category(): " << ex.code().category().name() << '\n';
    }
    // Toutes les fonctions ont des équivalents non-lanceurs d'exceptions
    std::error_code ec;
    std::filesystem::copy_file(from, to, ec); // ne lance pas d'exception
    std::cout << "\nLa forme non-lanceuse définit error_code : " << ec.message() << '\n';
}

Sortie possible :

what():  filesystem error: cannot copy file: No such file or directory [/none1/a] [/none2/b]
path1(): "/none1/a"
path2(): "/none2/b"
code().value():    2
code().message():  No such file or directory
code().category(): generic
Non-throwing form sets error_code: No such file or directory