web-dev-qa-db-ja.com

例外処理とファイルを開く?

.is_open()を使用する代わりに、ファイルを開く例外を使用することはできますか?

例えば:

ifstream input;

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

もしそうなら、someExceptionとはどんな型ですか?

38
Moshe

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

この回答もお読みください 11085151 これはこれを参照しています 記事

// 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

編集:例外セットからフェイルビットを削除しました。より良い回答にURLを追加しました。

38
KarlM

std::ios::exceptionsに関するcppreference.comの記事 から

失敗すると、failbitフラグが設定され(メンバーの失敗で確認できます)、例外で設定された値によっては、例外がスローされる場合があります。

0
DumbCoder