问题描述
例如,这就是我使用runtime_error的方式
#include <exception>
#include <filesystem>
std::exception &foo(){
try {
if(!std::filesystem::is_directory(std::filesystem::path("sdfsdf"))){
throw std::runtime_error("Error14");
}
}
catch (std::exception &e) {
return e;
}
}
int main(){
foo().what();
// then i do smth with this error
}
如何执行类似的操作,但是我的意思是从std ::文件系统返回错误
std::filesystem::filesystem_error
我尝试过这个->
#include <filesystem>
std::filesystem::filesystem_error &foo()
{
try {
if(!std::filesystem::is_directory(std::filesystem::path("sdfsdf"))){
throw std::filesystem::filesystem_error("ERROR14",std::error_code());
}
}
catch (std::filesystem::filesystem_error &e) {
// if (e.code == success)
{
return e;
}
}
}
int main()
{
foo();
}
如果没有异常(我是说抛出),如何返回这样的'e'
解决方法
CppReference说明了std::filesystem::filesystem_error
的构造函数。
只需使用其中之一:
throw std::filesystem::filesystem_error("Error14",std::error_code());
您可能希望输入更好的消息和错误代码:-)
, std::filesystem::is_directory有一些重载。如果提供std::error_code
对象作为最后一个参数,它将 不 抛出,但是如果发生操作系统错误,则设置错误代码对象的值。因此,您可以使用此重载来设置std::error_code
对象并从中创建std::filesystem::filesystem_error
:
std::filesystem::filesystem_error foo()
{
std::error_code err{};
if (!std::filesystem::is_directory(std::filesystem::path("sdfsdf"),err))
{
return std::filesystem::filesystem_error{ "ERROR14",err };
}
return std::filesystem::filesystem_error{ "SUCCESS",err };
}
请注意,这是按值返回的;如果通过引用返回,它将是对局部变量的引用,该局部变量将在函数返回后销毁,并且使用这种悬空引用将导致不确定的行为。