异常处理和打开文件?

时间:2012-03-12 15:56:38

标签: c++ exception-handling inputstream file-handling

是否可以使用文件打开的例外作为使用.is_open()

的替代方法

例如:

ifstream input;

try{
  input.open("somefile.txt");
}catch(someException){
  //Catch exception here
}

如果是,someException是什么类型的?

2 个答案:

答案 0 :(得分:34)

http://en.cppreference.com/w/cpp/io/basic_ios/exceptions

另请阅读此11085151

引用的答案article
// ios::exceptions
#include <iostream>
#include <fstream>
using namespace std;

void do_something_with(char ch) {} // Process the character 

int main () {
  ifstream file;
  file.exceptions ( ifstream::badbit ); // No need to check failbit
  try {
    file.open ("test.txt");
    char ch;
    while (file.get(ch)) do_something_with(ch);
    // for line-oriented input use file.getline(s)
  }
  catch (const ifstream::failure& e) {
    cout << "Exception opening/reading file";
  }

  file.close();

  return 0;
}

Wandbox

上运行的示例代码

编辑:通过const引用2145147

捕获异常

编辑:从异常集中删除了failbit。添加了网址以获得更好的答案。

答案 1 :(得分:0)

来自the cppreference.com article on std::ios::exceptions

  

失败时,会设置failbit标志(可以使用成员失败检查),并且根据异常设置的值,可能会抛出异常。