Spec-Zone.ru › C++

std::filesystem::filesystem_error

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

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

cpp/error/exception cpp/error/runtime error cpp/error/system error

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

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

(конструктор)
создаёт объект исключения
(открытая функция-член)
operator=
заменяет объект исключения
(открытая функция-член)
path1path2
возвращает пути, участвовавшие в операции, вызвавшей ошибку
(открытая функция-член)
what
возвращает поясняющую строку
(открытая функция-член)

Унаследовано от std::system_error

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

code
возвращает код ошибки
(открытая функция-член std::system_error)
what
[виртуальная]
возвращает поясняющую строку
(виртуальная открытая функция-член std::system_error)

Унаследовано от std::runtime_error

Унаследовано от std::exception

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

(деструктор)
[виртуальная]
уничтожает объект исключения
(виртуальная открытая функция-член std::exception)
what
[виртуальная]
возвращает поясняющую строку
(виртуальная открытая функция-член 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/cpp/filesystem/filesystem_error

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API