2012-03-12 59 views
31

作为使用.is_open()的替代方法,是否可以在打开文件时使用例外情况?异常处理和打开文件?

例如:

ifstream input; 

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

如果是这样,是什么类型someException

+1

HTTP://en.cppreference。 com/w/cpp/io/basic_ios /例外 – 2012-03-12 16:01:18

回答

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; 
} 

编辑:捕获异常由const引用2145147

+0

我们是否需要使用_ifstream_ _file_作为类型?我们可以使用_ofstream_吗? – penguin2718 2015-05-14 18:41:50

+1

假设你正在写一个文件,那么你可以用与ofstream相同的方式管理异常。使用ofstream :: failbit,ofstream :: badbit和ofstream :: failure。 – KarlM 2015-05-14 22:40:03

+0

@LightnessRacesinOrbit为什么它错了? – KarlM 2016-09-23 20:44:33

0

我觉得while (!file.eof())声明不应该在try范围..

+0

这是一个好主意,虽然你的答案只有真正完成,如果你将你的答案并入他的代码,然后显示它的代码片段? – Frits 2016-09-08 06:27:20

+0

@ muiz您是否建议您在阅读文件时想要以与打开文件时不同的方式处理错误条件?听起来不错。 – KarlM 2016-09-23 20:47:15