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 errorstd-filesystem-filesystem error-inheritance.svg

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

Члены-функции

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

Наследуется от std::system_error

Члены-функции

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

Наследуется от std::runtime_error

Наследуется от std::exception

Члены-функции

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

Spec-Zone.ru

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