Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/139.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ Boost::文件系统:检查错误代码_C++_Boost_Boost Filesystem_System Error - Fatal编程技术网

C++ Boost::文件系统:检查错误代码

C++ Boost::文件系统:检查错误代码,c++,boost,boost-filesystem,system-error,C++,Boost,Boost Filesystem,System Error,虽然我使用的是C++11,但这个问题与boost相关,因为我正在处理来自boost::file\u系统的错误 在下列情况下: try { // If p2 doesn't exists, canonical throws an exception // of No_such_file_or_directory path p = canonical(p2); // Other code } catch (filesystem_error& e)

虽然我使用的是C++11,但这个问题与boost相关,因为我正在处理来自
boost::file\u系统的错误

在下列情况下:

try {

     // If p2 doesn't exists, canonical throws an exception
     // of No_such_file_or_directory
     path p = canonical(p2);

     // Other code

} catch (filesystem_error& e) {

    if (e is the no_such_file_or_directory exception)
        custom_message(e);

} // other catchs
}
如果我在引发所需异常(没有\u文件或\u目录)时打印错误值:

// ...
} catch (filesystem_error& e) {
     cout << "Value: " << e.code().value() << endl;
}
/。。。
}捕获(文件系统错误&e){
cout和with different允许具有相同的
值()
。检查值和类别:

bool运算符==(常量错误代码&lhs,常量错误代码&rhs)无异常;

返回:
lhs.category()==rhs.category()&&lhs.value()==rhs.value()

因此,可以根据
make\u error\u code()
的返回检查异常的
error\u code
,如下所示:

试试看{
//如果p2不存在,canonical将抛出异常
//没有这样的文件或目录
路径p=规范(p2);
// ...    
}捕获(文件系统错误&e){
如果(如代码()==
生成错误代码(boost::system::errc::no_这样的文件或目录)){
自定义消息(e);
}
}

下面是一个完整的示例,两个
错误\u code
s尽管具有相同的值,但并不等效:

#包括
#包括
#包括
int main()
{
//两个不同的错误代码。
boost::system::error\u code code 1=生成错误代码(
boost::system::errc::没有这样的文件或目录);
boost::system::error\u code code 2=生成错误代码(
boost::asio::error::host\u未找到\u重试);
//具有不同错误类别的。
断言(code1.category()!=code2.category());
断言(代码1.default\u error\u condition().category()=
代码2.默认错误条件().类别();
//但却有同样的价值。
断言(code1.value()==code2.value());
断言(代码1.default\u error\u condition().value()==
代码2.默认错误条件()值();
//使用比较操作检查两个值
//和类别。
断言(代码1!=代码2);
断言(代码1.默认错误条件()=
代码2.默认错误条件();
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//使用Boost.filesystem进行测试
尝试
{
boost::filesystem::canonical(“伪文件”);
}
捕获(boost::filesystem::filesystem\u错误和错误)
{
如果(错误代码()==
生成错误代码(boost::system::errc::no_这样的文件或目录))
{
标准::cout