std::filesystem::filesystem_error
From cppreference.com
 
 
 < cpp | filesystem 
 
 
 C++ 
 Feature test macros (C++20)
 Concepts library (C++20)
 Metaprogramming library (C++11)
 Ranges library (C++20)
 Filesystem library (C++17)
 Concurrency support library (C++11)
 Execution control library (C++26)
Filesystem library 
 
 
 
 
 
filesystem::filesystem_error
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.
std-filesystem-filesystem error-inheritance.svg
Inheritance diagram
Contents
[edit] Member functions
 
 returns the paths that were involved in the operation that caused the error 
(public member function) [edit]
(public member function) [edit]
Inherited from std::system_error
Member functions
Inherited from std::runtime_error
Inherited from std::exception
Member functions
[edit] 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.
[edit] Example
Run this code
#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