为什么 BACKSPACE (\b) 不能按预期处理文件?

Why BACKSPACE (\b) does not work as intended with a file?

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

据我所知,对文件执行此操作的唯一方法是,如果我对其进行内存映射,编辑其内容,将它们复制到新文件并删除旧文件。

如果您 "printf" 将 BS 字符发送到终端,终端会对此进行解释,因此光标将向左移动。

但是如果你 "fprintf" 将 BS 字符写入文件,那么 BS 字符(只是一个字节)将被简单地写入文件。

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

您似乎误解了文件的工作原理。

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

文件只是字节的集合,当程序读取这些字节时,会产生(可能)有意义的结果,例如图片或视频或其他任何内容。除非程序知道退格字符应该删除前面的字符,否则它不会做任何事情。

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