2011-02-18 2 views
6

은, 어떤 파일이 전혀 생성되지 않습니다 :왜 스트림을 플러시해야합니까? 나는 다음과 같은 코드를 실행하면

std::ofstream outputFile(strOutputLocation.c_str(), std::ios::binary); 
outputFile.write((const char*)lpResLock, dwSizeRes); 
outputFile.close(); 

그러나, 나는 닫기 전에() 플러시를 추가하는 경우, 작동 :

std::ofstream outputFile(strOutputLocation.c_str(), std::ios::binary); 
outputFile.write((const char*)lpResLock, dwSizeRes); 
outputFile.flush(); 
outputFile.close(); 

표준 라이브러리를합니까 실제로 이것을 요구하거나 Visual C++ CRT의 버그입니까?

+3

Visual Studio의 버전은 무엇입니까? – GManNickG

+0

그리고 어떤 운영 체제입니까? –

답변

8

이것은 버그입니다. §27.8.1.10/4, 요약 된 읽기입니다 :

void close();
효과 : rdbuf()->close() ...

rdbuf()->close()은 무엇입니까 호출? §27.8.1.3/6, 축약, 강조 광산에 따르면

basic_filebuf<charT,traits>* close();
is_open() == false 경우, 널 포인터를 반환한다. 넣기 영역이있는 경우 overflow(EOF)을 호출하여 문자를 지 웁니다. ...

즉, 플러시한다고 가정합니다. (사실, flush()에 대한 호출은 궁극적으로 같은 일을한다.)


참고가 close()에 대한 호출 자체가 필요하지 않은, basic_ofstream의 소멸자 close()를 호출한다.

0

프로그램을 종료하기 전에 파일을 확인하고 있습니까? OS가 모든 IO를 버퍼링하므로 종료하기 전에 파일에서 데이터를 볼 수 없습니다 (플러시하지 않은 경우).

관련 문제