在istream :: read和istream :: seekg上检查失败的最佳方法

时间:2018-01-08 17:07:21

标签: c++ io

假设我有以下代码:

std::ifstream file(name, flags);
file.seekg(0, std::ios::beg);
// Check for error
file.read(buffer, size);
// Check for error

检查错误搜索/阅读的最简洁方法是什么?我应该检查ios :: fail和ios :: bad位吗?这些失败会触发异常吗? (我相信你必须手动注册失败例外)

1 个答案:

答案 0 :(得分:2)

当这两个函数失败时,它们会在错误掩码中设置某些标志,您可以在if语句中检查这些标志。流的布尔转换运算符将检查failbitbadbit的掩码,如果这两个都未设置,则返回true。默认情况下不会抛出异常,但您可以使用exceptions()方法设置异常。

if (!file.seekg(0, std::ios::beg)) {
  // Check for error
}

if (!file.read(buffer, size)) {
  // Check for error
}
相关问题