2012-03-12 24 views
31

È possibile utilizzare eccezioni con apertura file come alternativa all'utilizzo di .is_open()?Gestione delle eccezioni e apertura di un file?

Ad esempio:

ifstream input; 

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

Se sì, che tipo è someException?

+1

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

risposta

28

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

// ios::exceptions 
#include <iostream> 
#include <fstream> 
using namespace std; 

int main() { 
    ifstream file; 
    file.exceptions (ifstream::failbit | ifstream::badbit); 
    try { 
    file.open ("test.txt"); 
    while (!file.eof()) file.get(); 
    } 
    catch (const ifstream::failure& e) { 
    cout << "Exception opening/reading file"; 
    } 

    file.close(); 

    return 0; 
} 

EDIT: intercettare le eccezioni di riferimento const 2145147

+0

Abbiamo bisogno di usare _ifstream_ _file_ come tipo? Potremmo usare _ofstream_? – penguin2718

+1

Supponendo che tu stia scrivendo su un file, allora sì puoi gestire le eccezioni allo stesso modo con ofstream. Uso distream :: failbit, ofstream :: badbit e ofstream :: failure. – KarlM

+0

@LightnessRacesinOrbit Perché è sbagliato? – KarlM

0

penso while (!file.eof()) affermazione non dovrebbe essere nel campo di applicazione try ..

+0

Questa è una grande idea, anche se la tua risposta sarebbe davvero completa solo se hai incorporato la tua risposta nel suo codice e poi hai mostrato un frammento di codice di esso? – Frits

+0

@muiz Stai suggerendo di trattare le condizioni di errore in modo diverso durante la lettura del file rispetto all'apertura? Sembra interessante. – KarlM