我打开了一个(文本)文件,如下所示:File *fp = fopen("findPattern2.txt", "w+");
我写了文字。我在那里的最后一个角色是,
。现在我想使用退格键删除该字符。我已经读过BACKSPACE只移动光标的答案here,然后我必须通过在它上面写字来覆盖该字符,这就是我所做的。所以我fprintf(fp, "\b \b")
完全删除了,
,但这就是文件后面显示的内容:,BS BS
。所有这些都与终端一起工作。为什么不用文件?
从我收集的内容来看,文件的唯一方法是将内存映射,编辑内容,将其复制到新文件并删除旧文件。
答案 0 :(得分:5)
文件只是一个字节集合,当程序读入时会产生(可能)有意义的结果,如图片或视频等等。除非程序知道退格字符应该删除进行中的字符,否则它不会做任何事情。
您的终端是一个以这种方式编写的程序,用于对退格等特殊字符作出反应,并知道在收到一个特殊字符时该怎么做。
答案 1 :(得分:3)
如果您将BS
字符“printf”到终端,后者会对此进行解释,以便将光标移动到左侧。
但是如果你将BS
字符“fprintf”到文件中,那么BS
字符(只是一个字节)就会被写入文件中。
答案 2 :(得分:2)
游标和行编辑是控制台和终端所拥有的东西,而不是文件。
您似乎误解了文件的工作方式。
在文件内部根本没有编辑的概念,它是一个字节序列。您可以使用fseek()
覆盖以移动当前位置(有时称为“光标”,但这是一个类比,它并不意味着文件就像文本编辑器一样),然后写入新数据。