我如何 return 向 std::filesystem 发送错误消息?
How can i return an error to std::filesystem?
例如,这就是我使用 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:: 文件系统的错误return,我的意思是
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();
}
如何return这样'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 };
}
请注意,这是 return 按值计算;如果您 return 通过引用,它将是对在函数 return 之后销毁的局部变量的引用,并且使用这种悬空引用将导致未定义的行为。
例如,这就是我使用 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:: 文件系统的错误return,我的意思是
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();
}
如何return这样'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 };
}
请注意,这是 return 按值计算;如果您 return 通过引用,它将是对在函数 return 之后销毁的局部变量的引用,并且使用这种悬空引用将导致未定义的行为。