2012-10-08 5 views
0

파일을 이진 모드로 열면 is_open()true이지만 good()false입니까?개방시 스트림이 좋지 않습니까?

bool ok = false; 
std::ifstream stream("test.dat", std::ios::binary) 
if (stream.is_open()) 
{ 
    ok = stream.good();//Does a situation exist where the result of this is false ? 
    stream.close(); 
} 
+0

파일이 비어 있다면'good()'은 false를 반환 할 수 있지만 보장되지는 않습니다. 첫 번째 읽기 시도까지. – Praetorian

+0

아니요. 그러나 is_open() 호출 이후의 모든 I/O 작업은 bad, fail 또는 eof 비트를 설정할 수 있습니다. – imreal

+1

@ Prætorian 파일이 비어 있으면 eof 비트가 설정되어 I/O 작업이 수행되지 않습니다. – imreal

답변

1

아니오 : std::ifstream의 2 인자 생성자는 파일 열기가 실패 할 경우 failbit를 설정해야합니다.

§27.9.1.7 [ifstream.cons/2

explicit basic_ifstream(const char* s, ios_base::openmode mode = ios_base::in);

통화 rdbuf()->open(s, mode | ios_base::in). 이 함수가 null 포인터를 반환하면 setstate(failbit)을 호출합니다.) (열기

하고,

§27.9.1.4 [filebuf.members/2

basic_filebuf<charT,traits>* open(const char* s, ios_base::openmode mode);

반환 값 : this 성공하는 경우, 널 포인터, 그렇지 않으면

관련 문제