C++ Boost::文件系统:检查错误代码
虽然我使用的是C++11,但这个问题与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)
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