2012-12-07 7 views
0

나는 fstream 개체로 작업하고 있으며 파일의 끝 부분을 지나서 뭔가를 쓸 수 있는지 궁금하다. eof와 0으로 원하는 위치?파일 끝을 지나서 특정 주소에 쓰는 방법

예 :

fstream someFile; 
someFile.open("foo.dat", ios :: out | ios :: trunc | ios :: binary); // file is created, and empty 
someFile.seekp(100, ios :: beg); // expecting 100 zeroes to be written in file, but nothing happens 
someFile.write("yodelay-hee-hoo", 15); // file is still empty, does not work 

나는 약 한 시간 동안 문제를 검색했습니다,하지만 난 관련 더 아무것도 찾을 수 없습니다. 내가 만난 유일한 것은 .seekpios :: end과 함께 사용하여 차이가 0으로 채워지겠다고 말한 사람이지만 시도해 보았지만 나에게 도움이되지 못했습니다.

도움이된다면, 저는 VS2010에서 네이티브 컴파일을하고 있습니다. 팁을 제공 할 수 있다면 감사합니다.

+0

당신은'ios :: end'를 사용하고 싶지만 코드는'ios :: beg'를 말합니다 –

+0

그래서 seekp는 아마도 스트림을 오류 상태로 설정합니다. 오류가 무엇입니까? – hyde

+0

왜 그 0들을 직접 써야하지 않습니까? 그것은 능률적 일 것이고 훨씬 더 명백한 코드가 될 것입니다. 또는 나는 무엇인가 놓치고 있냐? – ereOn

답변

0

짧은 :-의 파일 끝 이전에 따라서 사전에 .clear()에 대한 호출을 필요로 .seekg()에 도달 한 경우.seekp()가 실패합니다.


긴 : 내가 처음에 의해 그 위치에 데이터가 있다면 내 쓰기 작업은, 내가 처음 .seekg()와 파일의 끝 과거의 위치를 ​​추구하기 때문에 실패 검증 것을 발견

.eof()이 false를 반환하는지 확인한 다음 .peek()을 사용하여 null이 아닌 문자를 찾습니다. .seekg()이 파일의 마지막에 도달 할 경우에도 것입니다

.eof()는 항상 읽기/엿/얻을 작업이 시도 될 때까지 false를 반환하는 것, 그리고 .peek()는 대해 널 (NULL)이 아닌 값 (-1)을 반환 파일 끝을 지나서 위치를 지정하십시오.

따라서 end-of-file은 .seekp() 전에 .clear()를 호출, 지난 파일의 끝 경우에 도달 한 경우이 솔루션은 확인 전에 null 이외의 문자 를 확인하기 위해, 그리고이 모든 것을 해결 .

관련 문제