48 votes

Gestion des exceptions et ouverture d'un fichier ?

Est-il possible d'utiliser des exceptions lors de l'ouverture d'un fichier au lieu d'utiliser l'option .is_open() ?

Par exemple :

ifstream input;

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

Dans l'affirmative, quel est le type de someException ?

53voto

KarlM Points 493

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

Lire aussi cette réponse 11085151 qui fait référence à cette 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 fonctionnant sur Boîte à baguettes

EDIT : attraper les exceptions par référence constante 2145147

EDIT : suppression de failbit de l'ensemble des exceptions. Ajout d'URLs pour de meilleures réponses.

2voto

DumbCoder Points 4097

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

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X