2010-07-05 9 views
3

이진 파일을 읽고 있습니다. 그리고 그것이 끝날 때. 그것은 feof() 함수에 의해 종료 된 것 같습니다. 바이너리 파일에는 EOF 문자가 없기 때문입니까? 그렇다면 어떻게 해결할 수 있을까요? 그것이 멈추지 않는 위치 5526900.에서 파일의 끝에 도달하면파일 읽기 : feof() 이진 파일

현재 내 코드는 while 루프

while (!feof(f)) 

을 사용하고 있습니다. 그냥 읽기를 계속하고, 나는 루프에 갇혀있다.

누군가가 왜 어떻게 해결할 수 있는지 말해 줄 수 있습니까?

감사

답변

22

당신은에 루프() 무엇이 일어 났는지를 결정하기 위해 feof 안 - 대신 FREAD의 반환 값을 사용() - 그것은 0을 반환 루프까지. 빈 파일을 읽는 것을 고려하면 쉽게 볼 수 있습니다. feof()는 읽기 작업 후 EOF 상태를 반환하므로 루프 제어로 사용되는 경우 항상 가짜 데이터를 읽으려고합니다.

왜 많은 사람들이 feof() (그리고 C++ 스트림의 eof() 멤버)가 다음 읽기 작업이 성공할 지 예측할 수 있는지 모르겠지만 나를 믿을 수는 없습니다.

+0

++ 좋은 캐치, Neil –

+0

고마워. 그것은 예상대로 기능적입니다. 네가 고마워. – Grey