2012-10-09 127 views
0

您好我想知道是否可以更新文本文件,我的意思是在不更改內容的情況下向所有行添加文本。假設一個這樣的文本文件。如何在不更改內容的情況下更新文本文件

A 
B 
C 
D 
E 
F 
G 

,我想更新像這樣(加附近的另一個字符的第一個字符關閉所有行)

A H 
B I 
C J 
D K 
E L 
F M 
G N 

,當我在追加模式打開一個文本文件,並使用各種方式fseek()功能即使它可以在行中添加一些數據,但每次都會丟失一些數據。

我希望它清楚地瞭解這個問題,如果你能幫到,我會很感激。不管怎麼說,還是要謝謝你。

+0

你試過的代碼是什麼?它是如何搞砸輸出的? – Mike

+0

我不這麼認爲。可能,您需要將這些值保存到內存中,按照您的要求進行組織,然後使用w模式回寫到文件中。 – Jack

+0

@Jack是的,它會這樣工作,但它會更長,效率更低。另一方面,我研究了網絡,大部分評論都贊同你的觀點。 – quartaela

回答

2

通過C和POSIX文件操作訪問的文件模型將文件呈現爲字節序列,並且沒有插入操作。您只能寫入現有字節(替換它們),將新字節添加到結尾或截斷文件。

要創建您想要的輸出,您必須寫入一個新文件。讀完輸入文件後,可以將新文件移動到舊文件的路徑,從而用新輸出替換舊文件。

+0

是的,我知道了。新文件是唯一的解決方案。無論如何感謝:) – quartaela

0

文本文件中「行」的概念實際上意味着文件中有換行符('\ n')。

要在文本文件中某一行的第一個元素之後添加數據,請查找要追加的字符,然後在該字符和下一個換行符之間放置數據。

+0

嗯,我想你誤解了這個問題。只需考慮添加第二列或像命令「跳到第一行並跳過第一個字符並打印第二個字符」。此外,請將此過程考慮爲所有行 – quartaela

+0

是否可以知道將哪個字符添加到特定行中?例如:是否有可能知道** H **被添加到包含** A **的行中? – TNC

+0

是的,實際上,我會根據第一行的字符打印第二列的字符。 – quartaela

1

最好的辦法是簡單地將所有數據讀入內存,然後用所需格式寫出文件。有時爲了可讀性和可維護性犧牲一點效率會更好。

+0

除了這種方式,除此之外沒有別的事可做。順便說一句,謝謝你的回覆。 – quartaela

相關問題