Namensräume
Varianten
Aktionen

std::filesystem::filesystem_error

Von cppreference.com
 
 
 
 
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.

cpp/error/exceptioncpp/error/runtime errorcpp/error/system errorstd-filesystem-filesystem error-inheritance.svg

Vererbungdiagramm

Inhalt

[bearbeiten] Memberfunktionen

konstruiert das Ausnahmeobjekt
(public member function) [bearbeiten]
ersetzt das Ausnahmeobjekt
(public member function) [bearbeiten]
gibt die Pfade zurück, die an der Operation beteiligt waren, die den Fehler verursacht hat
(public member function) [bearbeiten]
gibt den erklärenden String zurück
(public member function) [bearbeiten]

Abgeleitet von std::system_error

Memberfunktionen

gibt den Fehlercode zurück
(public member function von std::system_error) [bearbeiten]
[virtuell]
gibt einen erklärenden String zurück
(virtual public member function von std::system_error) [bearbeiten]

Geerbt von std::runtime_error


Abgeleitet von std::exception

Memberfunktionen

[virtuell]
zerstört das Ausnahmeobjekt
(virtuelle öffentliche Memberfunktion von std::exception) [bearbeiten]
[virtuell]
gibt einen erklärenden String zurück
(virtuelle öffentliche Memberfunktion von std::exception) [bearbeiten]

[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

#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