Espacios de nombres
Variantes
Acciones

std::filesystem::filesystem_error

De cppreference.com
 
 
 
 
Definido en el archivo de encabezado <filesystem>
class filesystem_error;
(desde C++17)

La clase std::filesystem::filesystem_error define un objeto excepción que se lanza por las sobrecargas de las funciones en la biblioteca de sistema de archivos cuando ocurren errores.

cpp/error/exceptioncpp/error/runtime errorcpp/error/system errorstd-filesystem-filesystem error-inheritance.svg
Acerca de esta imagen

Inheritance diagram

Contenido

[editar] Funciones miembro

Construye el objeto excepción.
(función miembro pública) [editar]
Reemplaza el objeto excepción.
(función miembro pública) [editar]
Devuelve las rutas de acceso involucradas en la operación que causó el error.
(función miembro pública) [editar]
Devuelve la cadena aclaratoria.
(función miembro pública) [editar]

Heredado de std::system_error

Member functions

Devuelve el código de error.
(función miembro pública de std::system_error) [editar]
[virtual]
Devuelve una cadena aclaratoria.
(función miembro virtual pública de std::system_error) [editar]

Heredado de std::runtime_error


Heredado de std::exception

Funciones miembro

[virtual]
Destruye el objeto excepción.
(función miembro virtual pública de std::exception) [editar]
[virtual]
Devuelve una cadena aclaratoria.
(función miembro virtual pública de std::exception) [editar]

Heredado de std::runtime_error


Heredado de std::exception

Funciones miembro

[virtual]
Destruye el objeto excepción.
(función miembro virtual pública de std::exception) [editar]
[virtual]
Devuelve una cadena aclaratoria.
(función miembro virtual pública de std::exception) [editar]

[editar] Notas

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

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

[editar] Ejemplo

#include <system_error>
#include <filesystem>
#include <iostream>
 
int main()
{
    const std::filesystem::path de{"/noexistente1/a"}, a{"/noexistente2/b"};
    try {
        std::filesystem::copy_file(de, a); // lanza: los archivos no existen
    }
    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';
    }
 
    // Todas la funciones tienen equivalentes que no lanzan
    std::error_code ec;
    std::filesystem::copy_file(de, a, ec); // no lanza
    std::cout << "\nla forma que no lanza establece error_code en: " << ec.message() << '\n';
}

Posible salida:

what():  filesystem error: cannot copy file: No such file or directory [/noexistente1/a] [/noexistente2/b]
path1(): "/noexistente1/a"
path2(): "/noexistente2/b"
code().value():    2
code().message():  No such file or directory
code().category(): generic
 
la forma que no lanza establece error_code en: No such file or directory