std::filesystem::filesystem_error
Определено в заголовке <filesystem> | ||
|---|---|---|
class filesystem_error; | (с C++17) |
Класс std::filesystem::filesystem_error определяет объект исключения, который выбрасывается при ошибке перегрузками функций в библиотеке файловой системы.
Диаграмма наследования
Члены-функции
| создаёт объект исключения (публичная функция-член) |
|
| заменяет объект исключения (публичная функция-член) |
|
| возвращает пути, которые были задействованы в операции, вызвавшей ошибку (публичная функция-член) |
|
| возвращает строку объяснения (публичная функция-член) |
Наследуется от std::system_error
Члены-функции
| возвращает код ошибки (публичная функция-член от std::system_error) |
|
|
[virtual] | возвращает строку объяснения (виртуальная публичная функция-член от std::system_error) |
Наследуется от std::runtime_error
Наследуется от std::exception
Члены-функции
|
[virtual] | уничтожает объект исключения (виртуальная публичная функция-член от std::exception) |
|
[virtual] | возвращает строку объяснения (виртуальная публичная функция-член от std::exception) |
Примечания
Для обеспечения того, что функции копирования filesystem_error являются noexcept, типичные реализации хранят объект, содержащий возвращаемое значение what(), и два объекта std::filesystem::path, на которые ссылаются path1() и path2() соответственно, в отдельном выделенном хранилище со счётом ссылок.
В настоящее время реализация MS STL не соответствует стандарту: упомянутые выше объекты хранятся непосредственно в объекте filesystem, что делает функции копирования не noexcept.
Пример
#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';
}Возможный вывод:
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
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/cpp/filesystem/filesystem_error