Namespaces
Variants

std::filesystem:: filesystem_error

From cppreference.net
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.

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

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:: 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