2011-04-01 69 views
2

我正在編寫一個方法來從二進制文件中替換指定的字符串,它在用seekp設置的位置之前寫入NULL,然後寫入字符串並關閉流。我只想替換文件中的一些字節。在這段代碼之前,我用ios :: binary和ios :: out標誌對ofstream進行了試用。如何銷燬文件中的所有數據? 在這段代碼之前,我打開帶有ifstream實例的文件,以讀取字符串中第一個字節的相同位置。我只評論這個信息。用fstream和seekp替換二進制文件中的數據

謝謝大家!

代碼:

fstream ofs(); 
ofs.open(nomArchBin,ios::in | ios::out | ios::binary); 

if (!ofs.good()) { 
    cout << "..."; 
    return; 
} 

ofs.seekp(despEnArchivo,ios::beg); 
char* registroChar = registroACadena(reg); 
ofs.write(registroChar,cabecera.tamanioReg); 
+0

你的問題到底是什麼? – NPE 2011-04-01 10:39:34

+0

這段代碼破壞了二進制文件中的數據。我只想替換一些字節。我做錯了什麼? – honnix 2011-04-01 10:53:39

回答

3

我知道這聽起來很愚蠢,但只有這樣,才能打開一個文件寫 ,而不是截斷它是打開閱讀,以及:如果你 真的在做ios::in | ios::out | ios::binary,它應該工作。 (但是 因爲你明顯重新進入了代碼,並沒有複製/粘貼它,所以我不知道這是否真的是你所做的。)

其他點你試圖尋找時要注意:

  • 該文件必須以二進制模式打開,並且填充了「C」 區域設置。 (恕我直言,文件以二進制模式打開應該忽略的區域, 但這不是標準的話。)
  • 兩個`seekg`和`seekp`有同樣的效果;使用或者更改另一個的 位置。
  • 唯一允許尋找任意位置的函數是 這兩個參數seek;一個參數表單只能用於尋求一個以前通過一個tell獲得的位置 。