2012-12-07 55 views
0

我正在使用fstream對象,我在想如何在文件末尾寫入內容,而不必手動填充文件末尾的空間eof和所需位置爲零?如何在文件末尾的特定地址寫入

例子:

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應該填補零差距,但我試過了,它不適合我。

如果有幫助,我在VS2010,本機編譯。謝謝你,如果你可以提供小費。

+0

你說你想使用'ios :: end',但你的代碼說'ios :: beg' –

+0

所以,seekp可能會將流設置爲錯誤狀態。什麼是錯誤? – hyde

+0

爲什麼你不想自己寫這些零?它可能會有效,並會產生更爲明確的代碼。或者我錯過了什麼? – ereOn

回答

0

簡稱:.seekp()如果-的文件端預先用.seekg()達到,因此需要以預先.clear()呼叫失敗。


長:

我發現我的寫操作失敗,因爲我第一次尋求過去結束的文件中的位置與.seekg(),並確認是否有在該位置數據,通過第一檢查.eof()是否返回false,然後查找帶有.peek()的非空字符。

的事情是,即使.seekg()到達檔案結尾,.eof()似乎總是返回false,直至任何讀/ PEEK/get操作嘗試,並.peek()任何返回一個非空值(-1)位置超過文件結束。

因此,解決方案是前檢查非空字符檢查文件結束,如果達到,如果過去的結束文件,調用.clear().seekp()之前,它解決了一切。

相關問題