2009-12-17 161 views
-1

嗨,我在C平臺上工作。請告訴我如何在C中的最後一行之前追加一行。我在追加模式下使用了fopen,但是我不能在最後一行之前添加一行。如何在最後一行之前添加一行C

我只想寫入文件的第二行。

+3

這個問題的文本是誤導性的:「追加」總是暗示「在最後」,但你想要做的是「插入」。 – 2009-12-17 09:42:01

+0

已經提出了幾種解決方案,它們都被證明是「gimme da code」請求。如果這是家庭作業,它應該像這樣標記。 – lorenzog 2009-12-17 10:56:03

回答

5

您不需要覆蓋整個文件。你只需要:

  • 在「RW」模式打開文件,
  • 閱讀您的文件,找到最後一行:存儲其在文件中的位置(ftell/ftello)及其內容
  • 去回到最後一行的開頭(fseek/fseeko
  • 在最後一行之前寫任何你想要的東西
  • 寫最後一行。
  • 關閉你的文件。
+0

+1,幾秒鐘之後擊敗我:-) – 2009-12-17 10:00:53

2

追加只追加到最後,而不是在中間。

您需要讀入整個文件,然後將其寫入新文件。您可能從後面開始運氣,並找到倒數第二個換行符的字節偏移量。然後,你可以阻止寫下整個「序曲」,添加你的新行,然後發出剩下的預告片。

+0

無需編寫整個文件:只能從插入點寫入。 – mouviciel 2009-12-17 10:01:15

3

無法直接在標準C中執行此操作,主要是因爲很少文件系統支持此操作。最簡單的方法是將文件讀入內存結構(無論如何你都可能擁有它),將該行插入內存,然後再將整個結構寫出來,覆蓋原始文件。

+0

無需編寫整個文件:只能從插入點寫入。 – mouviciel 2009-12-17 10:00:42

+0

在這種情況下,您必須找到插入點。請注意,我說「最簡單的方法」 - 當然還有很多其他的方法。 – 2009-12-17 10:06:39

1

您可以找到最後一行結束的位置,將最後一行讀入內存,回溯到該位置,寫入新行,然後寫入最後一行。

要找到的地方:尋找到最後,減去緩衝區大小。讀取緩衝區,查找 換行符。如果找不到,請向後尋找兩個緩衝區大小,然後重試。

您需要使用fopen的r +模式。

哦,你需要小心文本和二進制模式。你需要使用二進制模式,因爲在文本模式下你不能計算跳轉位置,你只能跳到你從ftell得到的位置。您可以通過閱讀整個文件並在每行的開頭呼叫ftell來解決此問題。對於大文件,這將是緩慢的。

+1

@Sachin - Nope。這不是rentacoder,這是一個幫助網站。我們會幫助你,但我們不會爲你寫作業(或工作分配)。如果你是C的新手,那沒關係,但是「給我代碼」的態度會讓你無法在這個網站上找到你。 – 2009-12-17 10:18:00

1

使用fseek跳轉到文件結尾,向後讀取,直到遇到換行符爲止。然後插入你的線。 您可能想通過計算您正在向後讀取多少個字符來保存您正在閱讀的「最後一行」,然後將其壓縮到正確分配的緩衝區。

相關問題