Namespaces
Variants

std::filesystem:: filesystem_error

From cppreference.net
Definido en el encabezado <filesystem>
class filesystem_error ;
(desde C++17)

La clase std::filesystem::filesystem_error define un objeto de excepción que se lanza ante fallos por las sobrecargas que lanzan excepciones de las funciones en la biblioteca del sistema de archivos.

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

Diagrama de herencia

Contenidos

Funciones miembro

construye el objeto de excepción
(función miembro pública)
reemplaza el objeto de excepción
(función miembro pública)
devuelve las rutas involucradas en la operación que causó el error
(función miembro pública)
devuelve la cadena explicativa
(función miembro pública)

Heredado de std:: system_error

Funciones miembro

devuelve el código de error
(función miembro pública de std::system_error )
[virtual]
devuelve una cadena explicativa
(función miembro pública virtual de std::system_error )

Heredado de std:: exception

Funciones miembro

[virtual]
destruye el objeto de excepción
(función miembro pública virtual de std::exception )
[virtual]
devuelve una cadena explicativa
(función miembro pública virtual de std::exception )

Notas

Para garantizar que las funciones de copia de filesystem_error sean noexcept, las implementaciones típicas almacenan un objeto que contiene el valor de retorno de what() y dos objetos std::filesystem::path referenciados por path1() y path2() respectivamente en un almacenamiento con conteo de referencias asignado por separado.

Actualmente la implementación de MS STL no es conforme: los objetos mencionados anteriormente se almacenan directamente en el objeto filesystem , lo que hace que las funciones de copia no sean noexcept.

Ejemplo

#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';
}

Salida posible:

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