回答
您不需要覆蓋整個文件。你只需要:
- 在「RW」模式打開文件,
- 閱讀您的文件,找到最後一行:存儲其在文件中的位置(
ftell
/ftello
)及其內容 - 去回到最後一行的開頭(
fseek
/fseeko
) - 在最後一行之前寫任何你想要的東西
- 寫最後一行。
- 關閉你的文件。
+1,幾秒鐘之後擊敗我:-) – 2009-12-17 10:00:53
追加只追加到最後,而不是在中間。
您需要讀入整個文件,然後將其寫入新文件。您可能從後面開始運氣,並找到倒數第二個換行符的字節偏移量。然後,你可以阻止寫下整個「序曲」,添加你的新行,然後發出剩下的預告片。
無需編寫整個文件:只能從插入點寫入。 – mouviciel 2009-12-17 10:01:15
無法直接在標準C中執行此操作,主要是因爲很少文件系統支持此操作。最簡單的方法是將文件讀入內存結構(無論如何你都可能擁有它),將該行插入內存,然後再將整個結構寫出來,覆蓋原始文件。
無需編寫整個文件:只能從插入點寫入。 – mouviciel 2009-12-17 10:00:42
在這種情況下,您必須找到插入點。請注意,我說「最簡單的方法」 - 當然還有很多其他的方法。 – 2009-12-17 10:06:39
您可以找到最後一行結束的位置,將最後一行讀入內存,回溯到該位置,寫入新行,然後寫入最後一行。
要找到的地方:尋找到最後,減去緩衝區大小。讀取緩衝區,查找 換行符。如果找不到,請向後尋找兩個緩衝區大小,然後重試。
您需要使用fopen
的r +模式。
哦,你需要小心文本和二進制模式。你需要使用二進制模式,因爲在文本模式下你不能計算跳轉位置,你只能跳到你從ftell
得到的位置。您可以通過閱讀整個文件並在每行的開頭呼叫ftell
來解決此問題。對於大文件,這將是緩慢的。
@Sachin - Nope。這不是rentacoder,這是一個幫助網站。我們會幫助你,但我們不會爲你寫作業(或工作分配)。如果你是C的新手,那沒關係,但是「給我代碼」的態度會讓你無法在這個網站上找到你。 – 2009-12-17 10:18:00
使用fseek
跳轉到文件結尾,向後讀取,直到遇到換行符爲止。然後插入你的線。 您可能想通過計算您正在向後讀取多少個字符來保存您正在閱讀的「最後一行」,然後將其壓縮到正確分配的緩衝區。
- 1. jQuery在第四行到最後一行之前添加行
- 2. 在gvim文件的最後一行之前添加四行
- 3. 在文本文件的最後一行之前添加文本
- 4. 在最後一行下方添加行
- 5. 如何在vim的最後一行之前表示行?
- 6. 在最後一行之前附加文件第n行
- 7. 在文件的最後一行之前追加三條新行
- 8. 如何添加類=「最後」到最後一行在環路
- 9. 如何在linux的最後一行添加行數
- 10. 如何使用Javascript在tbody的最後一行添加行
- 11. 如何在uitableview的最後一行添加新行
- 12. 在vim的另一條匹配行之前添加一行
- 13. 如何在$ q.all返回之前運行最後一段代碼?
- 14. 如何在最後一行之前插入字符串?
- 15. android tablelaayout動態添加行後添加最後一行
- 16. C#Winapp。,在datagridview的最後一行之後添加空白空間
- 17. 如何在SQL中的每個組的第一行之前添加一行?
- 18. 在底部添加一行作爲網格的最後一行
- 19. 如何在使用awk的每一行之前添加'?
- 20. 如何向特定類的最後一行添加表格行?
- 21. 如何在R中的每一行之間添加一行?
- 22. 如何在iOS中添加一行字符串到UITableView的最後一行?
- 23. 如何將一個按鈕添加到tableview的最後一行?
- 24. 如何添加一個CSS類到jsGrid的最後一行
- 25. 如何向最後一個表格行添加一個類
- 26. 如何選擇最後一行的前一行
- 27. 在添加文本之前添加一個換行
- 28. 如何強調counta之前的最後一行?
- 29. 添加行的最後一列
- 30. VBA僅插入添加最後一行
這個問題的文本是誤導性的:「追加」總是暗示「在最後」,但你想要做的是「插入」。 – 2009-12-17 09:42:01
已經提出了幾種解決方案,它們都被證明是「gimme da code」請求。如果這是家庭作業,它應該像這樣標記。 – lorenzog 2009-12-17 10:56:03