2017-03-29 38 views
1

我打開了一個(文本)文件,如下所示:File *fp = fopen("findPattern2.txt", "w+");其中我寫了文本。我在那裏的最後一個字符是,。現在我想使用退格刪除那個角色。我已經閱讀了回答here BACKSPACE只會移動光標,然後我不得不通過寫在它上面覆蓋該字符,這就是我所做的。所以我做了fprintf(fp, "\b \b")以完全擦除,,但是這是文件之後顯示的內容:,BS BS。所有這些都與終端一起工作。爲什麼不用一個文件?爲什麼BACKSPACE( b)不能像文件那樣按預期工作?

從我收集的唯一方法來做到這一點的文件將是如果我內存映射它,編輯其內容,將它們複製到一個新的文件,並刪除舊的。

+0

您是否嘗試過使用'fseek'或'fsetpos'? – user694733

+0

@ user694733是的。有用。但我的問題不在於此。 –

+0

我問,因爲問題說*「從我收集的唯一方法來做到這一點的文件將是如果我內存映射它,編輯其內容,將它們複製到一個新的文件,並刪除舊的。」*。這句話使得它聽起來像你想要的解決方案,但你的評論表明你只需要解釋。你應該[編輯]你的問題,明確你對答案的期望。 – user694733

回答

5

文件只是一個字節的集合,當程序讀入時(可能)產生有意義的結果,如圖片或視頻等。除非程序知道退格字符應該刪除後繼字符,否則它不會執行任何操作。

你的終端是一個程序,它已經以這種方式寫入,以便對特殊字符(如退格鍵)作出反應,並知道在收到一個特殊字符時該怎麼做。

3

如果您將「printf」BS字符添加到終端,則後者會對此進行解釋,以便將光標移動到左側。

但是,如果您將「fprintf」BS字符添加到文件中,那麼只會將BS字符(它只是一個字節)寫入文件中。

2

遊標和行編輯是控制檯和終端有的東西,而不是文件。

您似乎誤解了文件的工作方式。

在文件中根本沒有編輯的概念,它是一個字節序列。您可以使用fseek()來覆蓋當前位置(有時稱爲「光標」,但這只是一個比喻,並不意味着文件像文本編輯器一樣),然後寫入新數據。

相關問題