2012-10-03 4 views
1

나는 내가 연산자와 함께 sucessful 파일 열기를 확인할 수 있습니다! std :: fstream 클래스의 멤버 함수 fail().구성원 기능() std :: ftsream 검사에 대한

하지만이 목적으로 멤버 함수 bad()를 사용할 수 있습니까? 표준 준수인가 아닌가?

+1

왜 좋지 않은가요? –

답변

-1

은 당신이 할 수있는 예, ios::bad()boolean 반환하고 ! 간단하게 (즉, true ->false 반대의 경우도 마찬가지)을 boolean를 부정합니다.

의도가 있는지 여부는과 다른 질문입니다. bad()은 열지 않고 스트림의 무결성 손실을 검사합니다.

+0

성공적인 파일 열기를 확인하고 싶습니다. – FrozenHeart

+0

@NikitaTrophimov 그러면 직접 질문에 대답 할 수 있습니다. 이 목적으로':: bad()'를 사용할 수 없습니다. 표준에 부합하지 않습니다. –

2

ios::operator!ios::bad은 서로 바꿔 쓸 수 없습니다. operator!은 오류를 확인합니다 (ios::fail과 동일). ios::bad은 복구 할 수없는 오류 만 검사합니다.

해당 문서 herehere을 참조하십시오.

실제로 확인해야 할 것은 사용 사례에 따라 다르며 그 의미를 이해해야합니다.

+0

성공적인 파일 열기 만 확인하고 싶습니다. – FrozenHeart

+0

@NikitaTrophimov 그런 다음 ofstream이'good'인지 확인하십시오. – pmr

1

기능 "bad()"은 "복구 할 수없는 오류"에 대해 true을 산출합니다. 기본적으로 bad()은 어떤 형식의 형식 오류가 아닌 다른 이유로 실패 할 때마다 설정됩니다. 다양한 파일 스트림 클래스 (std::ofstream, std::ifstreamstd::fstream)의 open() 함수는 파일 버퍼 open()이 실패하면 모두 std::ios_base::failbit으로 설정됩니다! 즉 stream.bad()을 사용하여 open()이 실패했는지 테스트 할 수 없습니다. stream.fail()을 사용할 수 있습니다. 개인적으로 귀찮게하지 않고 변환을 사용하여 bool :

std::ofstream out("file"); 
if (out) { 
    process(); 
} 
else { 
    report_error(); 
} 
+0

그래서 나는이 연산자를 사용할 수 있습니다!, fail() 및 good()이 목적으로 사용 하시겠습니까? – FrozenHeart

+0

'bool','operator!()','fail()'에 묵시적 변환을 사용하여'open()'이 실패했는지 판단 할 수 있습니다. 파일이 비어있는 경우,'eof()'는 파일의'open()'이 성공한 직후에 설정 될 수 있습니다. (필자는 잘 모르겠습니다 만, 그것 아래로). 'std :: ios_base :: eofbit'를 포함하여 에러 비트가 설정되면'good()'은'false'입니다. 어쨌든 다른 세 가지 방법으로도 충분하고'eof()'보다'good()'을 적게 사용합니다. –

관련 문제