std::filesystem::filesystem_error
Von cppreference.com
< cpp | filesystem
| Definiert in Header <filesystem> |
||
| class filesystem_error; |
(seit C++17) | |
Die Klasse std::filesystem::filesystem_error definiert ein Ausnahmeobjekt, das bei einem Fehler von den auslösenden Überladungen der Funktionen in der Filesystem-Bibliothek ausgelöst wird.
Vererbungdiagramm
Inhalt |
[bearbeiten] 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 den erklärenden String zurück (public member function) |
Abgeleitet von std::system_error
Memberfunktionen
| gibt den Fehlercode zurück (public member function von std::system_error) | |
| [virtuell] |
gibt einen erklärenden String zurück (virtual public member function von std::system_error) |
Geerbt von std::runtime_error
Abgeleitet von std::exception
Memberfunktionen
| [virtuell] |
zerstört das Ausnahmeobjekt (virtuelle öffentliche Memberfunktion von std::exception) |
| [virtuell] |
gibt einen erklärenden String zurück (virtuelle öffentliche Memberfunktion von std::exception) |
[bearbeiten] Hinweise
Um sicherzustellen, dass die Kopierfunktionen von filesystem_error noexcept sind, speichern typische Implementierungen in einem separat allokierten Referenz-gezählten Speicher ein Objekt, das den Rückgabewert von what() und zwei std::filesystem::path-Objekte enthält, die von path1() bzw. path2() referenziert werden.
Derzeit ist die MS STL-Implementierung nicht konform: Die oben genannten Objekte werden direkt im filesystem-Objekt gespeichert, wodurch die Kopierfunktionen nicht noexcept sind.
[bearbeiten] Beispiel
Führen Sie diesen Code aus
#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