2011-10-30 12 views
6

Tôi đang sử dụng các phương pháp sau đây để đọc nội dung của một tập tin vào một chuỗi:Làm thế nào để kiểm tra lỗi I/O khi sử dụng "ifstream", "stringstream" và "rdbuf()" để đọc nội dung của tệp thành chuỗi?

std::ifstream t("file.txt"); 
std::stringstream buffer; 
buffer << t.rdbuf(); 
std::string data(buffer.str()); 

Nhưng làm thế nào để tôi kiểm tra cho I/O lỗi và đảm bảo rằng tất cả các nội dung đã thực sự được đọc?

Trả lời

5

Bạn có thể làm điều đó giống như cách bạn sẽ làm điều đó với bất kỳ hoạt động chèn khác:

if (buffer << t.rdbuf()) 
{ 
    // succeeded 
} 

Nếu một trong hai quá trình chiết từ t.rdbuf() hoặc chèn để buffer thất bại, failbit sẽ được đặt trên buffer.

0

t.good() đã được đề cập bởi bashor

Lưu ý mặc dù, rằng t.good() != t.bad(); Bạn có thể muốn sử dụng !t.bad() (hoặc !t.fail(), !t.eof() cho cụ điều kiện)

Tôi thường sử dụng

if (!t.bad()) 
{ 
    // go ahead if no _unpexpected errors 

} 

if (!t.fail()) 
    t.clear(); // clear any _expected_ errors 
Các vấn đề liên quan