std::filesystem:: filesystem_error
|
Definiert im Header
<filesystem>
|
||
|
class
filesystem_error
;
|
(seit C++17) | |
Die Klasse
std::filesystem::filesystem_error
definiert ein Ausnahmeobjekt, das bei Fehlern von den werfenden Überladungen der Funktionen in der Filesystem-Bibliothek ausgelöst wird.
Vererbungsdiagramm
Inhaltsverzeichnis |
Memberfunktionen
|
konstruiert das Ausnahmeobjekt
(public member function) |
|
|
ersetzt das Ausnahmeobjekt
(public member function) |
|
|
gibt die Pfade zurück, die an der Operation beteiligt waren, die den Fehler verursacht hat
(public member function) |
|
|
gibt die erläuternde Zeichenkette zurück
(public member function) |
Geerbt von std:: system_error
Elementfunktionen
|
gibt Fehlercode zurück
(öffentliche Elementfunktion von
std::system_error
)
|
|
|
[virtual]
|
gibt erläuternde Zeichenkette zurück
(virtuelle öffentliche Elementfunktion von
std::system_error
)
|
Geerbt von std:: runtime_error
Geerbt von std:: exception
Elementfunktionen
|
[virtual]
|
zerstört das Exception-Objekt
(virtuelle öffentliche Elementfunktion von
std::exception
)
|
|
[virtual]
|
gibt einen erklärenden String zurück
(virtuelle öffentliche Elementfunktion von
std::exception
)
|
Hinweise
Um sicherzustellen, dass die Kopierfunktionen von
filesystem_error
noexcept sind, speichern typische Implementierungen ein Objekt, das den Rückgabewert von
what()
und zwei
std::filesystem::path
-Objekte, auf die durch
path1()
und
path2()
referenziert wird, in einem separat allokierten referenzgezählten Speicher.
Derzeit ist die
MS STL-Implementierung
nicht konform: Die oben genannten Objekte werden direkt im
filesystem
-Objekt gespeichert, was die Kopierfunktionen nicht noexcept macht.
Beispiel
#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); // throws: files do not exist { 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'; } // All functions have non-throwing equivalents std::error_code ec; std::filesystem::copy_file(from, to, ec); // does not throw std::cout << "\nNon-throwing form sets error_code: " << ec.message() << '\n'; }
Mögliche Ausgabe:
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