使用文件流的c ++操作:何时检查错误?

时间:2017-06-30 19:32:20

标签: c++ iostream

假设我需要对流执行多个读取或写入操作,并在其中任何一个以错误结束时抛出异常。以下两种方式有什么区别:

{
  std::ifstream ifs("filename");
  int i;
  std::string s;
  long l;
  //all variables are local, so I'm not interested in them in case of exception

  //first way
  if(!ifs >> i) throw runtime_error("Bad file");
  if(!std::getline(ifs, s)) throw runtime_error("Bad file");
  if(!ifs >> l) throw runtime_error("Bad file");

  //second way
  ifs >> i;
  std::getline(ifs, s);
  ifs >> l;
  if(!ifs) throw runtime_error("Bad file");

  //do something with variables
}

如果没有差异,那么在我应该知道的类似案件中是否有任何陷阱?

1 个答案:

答案 0 :(得分:4)

您可以启用例外:

ifs.exceptions(std::ifstream::failbit | std::ifstream::badbit);

在这种情况下,如果流无法正确读取内容,则会抛出std::ios_base::failure类型的异常。