Namespaces
Variants

std::filesystem:: filesystem_error

From cppreference.net
Определено в заголовочном файле <filesystem>
class filesystem_error ;
(начиная с C++17)

Класс std::filesystem::filesystem_error определяет объект исключения, который выбрасывается при неудаче выбрасывающими перегрузками функций в библиотеке файловой системы.

cpp/error/exception cpp/error/runtime error cpp/error/system error std-filesystem-filesystem error-inheritance.svg

Диаграмма наследования

Содержание

Функции-члены

создает объект исключения
(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