std::filesystem:: filesystem_error
|
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.
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:: runtime_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