2012-02-06 175 views
3

我試圖覆蓋C中的文件的內容,目前我有:如何覆蓋C文件?

FILE* file = fopen("filename.txt", "r+"); 
fprintf(file, "%d", 1); // regardless of what's in the file, i want to clear it and put 1 in there 
... 
// legacy code somewhere else in the code base. can't change. 
rewind(file); 
fprintf(file, "%d", 2); 
fflush(file); 

然而,這將無法正常工作。其結果將是:

1,21

每個後續號碼將被寫入到1的開頭例如:

1,第21,31,41,...

我想知道是否有一種方法來始終覆蓋所以下面的產生有什麼文件:

1,2,3,4,...

任何援助將不勝感激。

謝謝。

編輯:

我已經改變了代碼:

FILE* file = fopen("filename.txt", "w+"); 

的問題仍然存在。

+2

只要打開它爲「W +」 – BlackBear 2012-02-06 18:41:10

回答

11

你決定在fopen。只需使用"w""w+"而不是"r+"

+0

喜博,對不起你的建議是行不通的:(也許我沒有做正確的事情 – czchlong 2012-02-06 18:45:35

+0

也許我只是解決了你的第一個問題 - 如何清除舊的文件如果。其他代碼做倒帶,我們不能真的停止。 – 2012-02-06 18:50:02

+0

所以如果其他代碼不做倒帶,那麼問題可以修復? – czchlong 2012-02-06 18:56:14

2

據我所知,你不能用fprintf覆蓋任何東西。你必須使用fwrite,例如就像

rewind(file); 
char buf[10]; 
sprintf(buf, "%d", 2); 
fwrite(buf, strlen(buf), 1, file); 

從你的代碼和問題我不完全按照你實際嘗試做什麼,但希望這有助於(你問了半年後)。

0

使用以下命令fprintf前:

freopen(NULL,"w+",file); 
0

我經歷了同樣的問題。我想從我輸入的內容中覆蓋相同的文件。所以嘗試不同的方法後,我決定創建另一個指向同一個文件的指針。所以我有一個讀取輸入的指針,然後使用fclose()關閉該指針,並且我有另一個指針來覆蓋同一個文件,並再次使用fclose()關閉該指針。這對我有效。