【问题标题】:Why BACKSPACE (\b) does not work as intended with a file?为什么 BACKSPACE (\b) 不能按预期使用文件?
【发布时间】:2017-03-29 08:38:28
【问题描述】:

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

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

【问题讨论】:

  • 您是否尝试过使用fseekfsetpos
  • 我问是因为问题说 “据我所知,对文件执行此操作的唯一方法是,如果我对其进行内存映射,编辑其内容,将它们复制到新文件并删除旧的。”。这句话听起来像是您想要解决方案,但您的评论表明您只需要解释。您应该edit您的问题,以明确您对答案的期望。

标签: c file printf backspace


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    如果您将BS 字符“打印”到终端,终端会对此进行解释,因此光标将向左移动。

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

    【讨论】:

      【解决方案3】:

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

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

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

      【讨论】:

        猜你喜欢
        • 2021-10-30
        • 1970-01-01
        • 1970-01-01
        • 2021-05-30
        • 2020-03-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多