web-dev-qa-db-fra.com

Gestion des exceptions et ouverture d'un fichier?

Est-il possible d'utiliser des exceptions avec l'ouverture de fichier plutôt que d'utiliser .is_open()?

Par exemple:

ifstream input;

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

Si oui, quel type est someException?

37
Moshe

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

Lisez également cette réponse 11085151 qui fait référence à cette information 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;
}

Exemple de code exécuté sur Wandbox

EDIT: intercepte les exceptions par la référence const 2145147

EDIT: FailBit supprimé de l'ensemble des exceptions. Ajout d'URL pour de meilleures réponses.

33
KarlM

De l'article de cppreference.com sur std::ios::exceptions

En cas d'échec, l'indicateur failbit est défini (ce qui peut être vérifié avec member fail) et, en fonction de la valeur définie avec les exceptions, une exception peut être levée.

0
DumbCoder