std::filesystem:: filesystem_error
|
Определено в заголовочном файле
<filesystem>
|
||
|
class
filesystem_error
;
|
(начиная с C++17) | |
Класс
std::filesystem::filesystem_error
определяет объект исключения, который выбрасывается при неудаче выбрасывающими перегрузками функций в библиотеке файловой системы.
Диаграмма наследования
Содержание |
Функции-члены
|
создает объект исключения
(public member function) |
|
|
заменяет объект исключения
(public member function) |
|
|
возвращает пути, которые были задействованы в операции, вызвавшей ошибку
(public member function) |
|
|
возвращает поясняющую строку
(public member function) |
Унаследовано от 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); // выбрасывает исключение: файлы не существуют } 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'; } // Все функции имеют не выбрасывающие исключения эквиваленты std::error_code ec; std::filesystem::copy_file(from, to, ec); // не выбрасывает исключение std::cout << "\nНе выбрасывающая форма устанавливает 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