2011-03-07 61 views
3

我有一個已經創建的巨大文件。我需要在文件起始處寫入一些數據,同時保留文件的其他內容。以下代碼破壞了現有文件。任何人都可以用正確的方法幫助我。C++:使用fstream修補二進制文件

ofstream oFile(FileName,ios::out|ios::binary); 
oFile.seekp(0); 
oFile.write((char*)&i,sizeof(i));  
oFile.write((char*)&j,sizeof(i)); 
oFile.close(); 

編輯: 基本上我想在不同的位置,包括開始覆蓋現有文件的一些字節。我知道要寫入的位置的字節地址。我的寫作不會改變文件大小。

我需要做一些等同於以下代碼的工作:

oFile.seekp(0); 

執行寫入前:

int mode = O_RDWR; 
int myFilDes = open (FileName, mode, S_IRUSR | S_IWUSR); 
lseek (myFilDes, 0, SEEK_SET); 
write (myFilDes, &i, sizeof (i)); 
write (myFilDes, &j, sizeof (j)); 
+2

是否打算將新字節附加到文件的前面或覆蓋它? – GWW 2011-03-07 00:37:50

+0

您將需要在十六進制編輯器中進行測試,然後在其工作時將其傳遞給C++。 – Gareve 2011-03-07 00:39:19

+0

我需要覆蓋它 – Arpit 2011-03-07 00:43:06

回答

1

你缺少ios::in

用途:

ofstream oFile(FileName,ios::out|ios::in|ios::binary);

3

則應執行。 ios :: ate意味着你正在追加到文件。

您還需要使用ios :: in而不是ios :: out。 ios :: out意味着你計劃截斷文件,這可能會導致無法預料的後果。

如果你想「插入」這不是直觀

+0

我試過了。但原始文件被覆蓋。你可以請檢查編輯的問題。 – Arpit 2011-03-07 01:00:07

+0

@Arpit:你後來接受的答案與此答案相同的事情不那麼詳細。 – 2011-03-07 10:34:34

0

,你要知道,C++看到「文件」之類的字節流......所以,如果你已完成了:

| 1 | 5 | 10 | 11 | 2 | 3 |

而你想在第一位置(設定在0度位置),你將不得不移動文件的其餘部分插入數據...