Trong C++, có trường hợp std::ifstream open()
có thể thành công hay không, nhưng std::ifstream good()
có thể sai không?Mở thành công nhưng không tốt?
EDIT: thử nghiệm với g ++ 4.7.1
#include <iostream>
#include <fstream>
int main(int argc, char *argv[])
{
std::ifstream filestream("testfile");
std::cout<<filestream.good()<<std::endl;
std::cout<<filestream.eof()<<std::endl;
std::cout<<filestream.fail()<<std::endl;
std::cout<<filestream.bad()<<std::endl;
return 0;
}
sẽ trở lại: 1, 0, 0, 0 cho một tập tin rỗng có nghĩa good = TRUE
và eof = fail = bad = FALSE
. Nó có bình thường không ?
+1 việc triển khai thực sự có thể không kiểm tra tệp cho đến khi bạn thử đọc và đọc không thành công. –
@ DavidRodríguez-dribeas Nói chung, nó không có ý nghĩa để kiểm tra 'eofbit' cho đến khi một đầu vào đã thất bại. Và thực tế là 'std :: ifstream :: good()' kiểm tra 'eofbit' (ngoài các bit trạng thái khác) làm cho nó khá vô giá trị. –
Tôi không nghĩ có bất kỳ tác hại * nào trong câu hỏi bằng cách sử dụng 'good' ở đó không? Chỉ vì 'eofbit' không được thiết lập, bạn cũng có thể kiểm tra luồng cho sự thật như bình thường. Tôi cho rằng có khả năng dễ gây hại khi làm điều gì đó vô nghĩa bất thường, và như bạn nói khá nhiều việc sử dụng 'good' là vô nghĩa bất thường ... –