2012-03-12 21 views
31

Có thể sử dụng ngoại lệ với việc mở tệp để thay thế cho việc sử dụng .is_open() không?Xử lý ngoại lệ và mở tệp?

Ví dụ:

ifstream input; 

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

Nếu vậy, loại là someException?

+1

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

Trả lời

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: trường hợp ngoại lệ bắt bằng cách tham chiếu const 2145147

+0

Chúng ta có cần sử dụng _ifstream_ _file_ làm loại không? Chúng ta có thể sử dụng _ofstream_? – penguin2718

+1

Giả sử bạn đang ghi vào một tập tin, sau đó có bạn có thể quản lý ngoại lệ theo cùng một cách với ofstream. Sử dụng ofstream :: failbit, ofstream :: badbit và ofstream :: thất bại. – KarlM

+0

@LightnessRacesinOrbit Tại sao nó sai? – KarlM

0

Tôi nghĩ while (!file.eof()) tuyên bố không phải ở trong phạm vi try ..

+0

Đây là một ý tưởng tuyệt vời, mặc dù câu trả lời của bạn sẽ chỉ thực sự hoàn chỉnh nếu bạn đưa câu trả lời vào mã của mình và sau đó hiển thị đoạn mã của nó? – Frits

+0

@muiz Bạn có đề xuất bạn muốn xử lý các điều kiện lỗi khác nhau khi đọc tệp hơn khi mở tệp không? Nghe có vẻ thú vị. – KarlM