std::filesystem::filesystem_error
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.
Contenido |
[editar] Funciones miembro
Construye el objeto excepción. (función miembro pública) | |
Reemplaza el objeto excepción. (función miembro pública) | |
Devuelve las rutas de acceso involucradas en la operación que causó el error. (función miembro pública) | |
Devuelve la cadena aclaratoria. (función miembro pública) |
Heredado de std::system_error
Member functions
Devuelve el código de error. (función miembro pública de std::system_error )
| |
[virtual] |
Devuelve una cadena aclaratoria. (función miembro virtual pública de std::system_error )
|
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 )
|
[virtual] |
Devuelve una cadena aclaratoria. (función miembro virtual pública de std::exception )
|
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 )
|
[virtual] |
Devuelve una cadena aclaratoria. (función miembro virtual pública de std::exception )
|
[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