std::filesystem:: filesystem_error
|
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.
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:: runtime_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