2009-04-20 49 views
1

我有一個小的代碼塊應該附加文本到文件的開頭。但是它只會增加文件的末尾。我認爲後退將指針設置爲文件的前端,因此當我使用fprintf添加文本時,它應該添加到前面。我該如何改變這一點?尋求文件開頭

fp = fopen("Data.txt", "a"); 
rewind(fp); 
fprintf(fp, "%s\n", text); 
fclose(fp); 

文本是在文件

回答

12

1)不要在打開附加模式的前要添加的字符數組。

當您以追加模式打開時,無論搜索位置如何,所有寫入都將轉到文件末尾。

http://www.opengroup.org/onlinepubs/009695399/functions/fopen.html

打開與附加模式(一個作爲 在模式 參數中的第一個字符)應使所有後續 寫入文件將被強制爲 然後電流端的一個文件-file,不管 中間調用fseek()。

2)打開沒有「a」仍然不會做你想要的。無法使用ANSI/POSIX文件操作插入到文件中,因爲考慮到大多數文件系統存儲數據的方式,插入操作並非簡單操作。

您需要打開一個新文件,寫入新數據,然後追加舊文件,否則您需要圍繞以塊爲單位向前移動數據。對於大型文件來說,這兩種選擇對於大文件來說效率都非常低,與最後的附加選項相比,如果您需要程序或機器能夠在不損壞數據的情況下意外死亡,更不用說容易出錯。因此,如果這是一個日誌文件或類似文件,可能需要重新設計,以便您可以將新數據寫入最後,然後在您從日誌中準備報告時將其全部撤消。

4

您可以將文件中的數據替換爲,但不能將其預先插入或插入到文件最後的任何位置。

0

只需使用您的數據創建一個新文件,然後將舊數據添加到您創建的此文件中。