std::filesystem:: filesystem_error
Defined in header
<filesystem>
|
||
class
filesystem_error
;
|
(since C++17) | |
The class
std::filesystem::filesystem_error
defines an exception object that is thrown on failure by the throwing overloads of the functions in the filesystem library.
Inheritance diagram
Member functions
constructs the exception object
(public member function) |
|
replaces the exception object
(public member function) |
|
returns the paths that were involved in the operation that caused the error
(public member function) |
|
returns the explanatory string
(public member function) |
Inherited from std:: system_error
Member functions
returns error code
(public member function of
std::system_error
)
|
|
[virtual]
|
returns an explanatory string
(virtual public member function of
std::system_error
)
|
Inherited from std:: runtime_error
Inherited from std:: exception
Member functions
[virtual]
|
destroys the exception object
(virtual public member function of
std::exception
)
|
[virtual]
|
returns an explanatory string
(virtual public member function of
std::exception
)
|
Notes
In order to ensure that copy functions of
filesystem_error
are noexcept, typical implementations store an object holding the return value of
what()
and two
std::filesystem::path
objects referenced by
path1()
and
path2()
respectively in a separately-allocated reference-counted storage.
Currently the
MS STL implementation
is non-conforming: objects mentioned above are stored directly in the
filesystem
object, which makes the copy functions not noexcept.
Example
#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'; }
Possible output:
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