为什么BACKSPACE(\ b)不能像文件一样工作?

时间:2017-03-29 08:38:29

标签: c file printf backspace

我打开了一个(文本)文件,如下所示:File *fp = fopen("findPattern2.txt", "w+");我写了文字。我在那里的最后一个角色是,。现在我想使用退格键删除该字符。我已经读过BACKSPACE只移动光标的答案here,然后我必须通过在它上面写字来覆盖该字符,这就是我所做的。所以我fprintf(fp, "\b \b")完全删除了,,但这就是文件后面显示的内容:,BS BS。所有这些都与终端一起工作。为什么不用文件?

从我收集的内容来看,文件的唯一方法是将内存映射,编辑内容,将其复制到新文件并删除旧文件。

3 个答案:

答案 0 :(得分:5)

文件只是一个字节集合,当程序读入时会产生(可能)有意义的结果,如图片或视频等等。除非程序知道退格字符应该删除进行中的字符,否则它不会做任何事情。

您的终端是一个以这种方式编写的程序,用于对退格等特殊字符作出反应,并知道在收到一个特殊字符时该怎么做。

答案 1 :(得分:3)

如果您将BS字符“printf”到终端,后者会对此进行解释,以便将光标移动到左侧。

但是如果你将BS字符“fprintf”到文件中,那么BS字符(只是一个字节)就会被写入文件中。

答案 2 :(得分:2)

游标和行编辑是控制台和终端所拥有的东西,而不是文件。

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

在文件内部根本没有编辑的概念,它是一个字节序列。您可以使用fseek()覆盖以移动当前位置(有时称为“光标”,但这是一个类比,它并不意味着文件就像文本编辑器一样),然后写入新数据。