2012-03-12 31 views
31

¿Es posible usar excepciones con la apertura de archivos como alternativa al uso de .is_open()?Excepción Manejo y apertura de un archivo?

Por ejemplo:

ifstream input; 

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

Si es así, de qué tipo es someException?

+1

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

Respuesta

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: excepciones de captura por referencia constante 2145147

+0

¿Necesitamos usar _fstream_ _file_ como tipo? ¿Podríamos usar _ofstream_? – penguin2718

+1

Suponiendo que está escribiendo en un archivo, entonces sí puede gestionar excepciones de la misma manera con ofstream. Uso destream :: failbit, ofstream :: badbit y ofstream :: failure. – KarlM

+0

@LightnessRacesinOrbit ¿Por qué está mal? – KarlM

0

creo while (!file.eof()) declaración no debe estar en el ámbito try ..

+0

Esta es una gran idea, aunque su respuesta sería realmente completa si incorpora su respuesta en su código y luego muestra el fragmento de código de la misma? – Frits

+0

@muiz ¿Sugiere que desee tratar las condiciones de error de forma diferente al leer el archivo que al abrirlo? Suena interesante. – KarlM

Cuestiones relacionadas