【问题标题】:Why is it not possible to erase contents from a file in C++? [closed]为什么不能从 C++ 中删除文件中的内容? [关闭]
【发布时间】:2014-01-22 05:35:08
【问题描述】:

标题几乎说明了一切,但仍需详细说明:

如果语言会限制我向文件添加新内容(无论位置如何),我会理解的,因为它会导致碎片化。 但我不明白的是为什么不可能:

  1. 从最后一行删除内容,类似于从 EOF 中退格。 [ASCII/二进制]
  2. 擦除文件中间部分的内容 [ASCII/BINARY]
  3. 将文件中的文本替换为其他相同大小的文本 [ASCII]
  4. 将文件中的数据替换为其他一些相同大小的数据 [二进制]

还有其他语言支持吗?

编辑:要在 C++ 中执行此操作,您需要读取文件,对变量执行修改,然后创建一个新文件。问题是为什么不能编辑“原始”文件而不是创建另一个文件。

【问题讨论】:

  • 你可以做所有这些事情。那么“不可能”是什么意思呢?
  • 1. stackoverflow.com/questions/15154263/…,3 和 4:微不足道,2:稍加工作即可。某些语言可能使 2 更容易,但我不知道其中一种。 (真的,ASCII/二进制与这些无关。)
  • 您是否期望有预先编写的或标准的库函数来为您完成这些任务?
  • 重新编辑:不,您不需要创建新文件。只有 2. 要求您从文件中读取任何内容。
  • @ScarletAmaranth c++ 是静态类型的。

标签: c++ file


【解决方案1】:

还有其他语言支持吗?

C++ 支持它。你可以寻找,你可以写作。但是事实上这是一个非常罕见的场景来替换相同的确切字节长度,并且用另一串具有不同长度的字节替换一堆字节的事实在某种程度上是非常低效的,因为写一个新文件更快,导致存在的语言和功能。

其他语言可能会以不同的方式处理这个问题,但我还没有学习一种真正能做到的语言。因为文件处理不会因语言而改变,并且所有语言和框架的编写者都得出了相同的结论:文件不是插入和删除数据的最佳媒介。 数组并不是插入和删除的最佳媒介,文件只是其中之一。

如果您需要插入和删除,请使用另一个容器(想到列表)。如果您需要将此容器持久化到磁盘,请在完成所有操作后进行。

【讨论】:

  • 用例是:用户在上一个会话期间保存了数百万个双重变量的文件。如果他打开文件只是编辑单个双变量并保存文件,我必须在新文件中再次写入数百万个变量。相反,我认为最好简单地替换它。
  • @Cool_Coder 好的,所以您在文件中查找要覆盖特定双精度的位置并将新双精度写入其中。问题到底出在哪里?
  • 我不知道可以这样做。我的坏...:( 使用过多的 Qt 导致我远离 C++
【解决方案2】:

看起来您希望对文件的低级访问能够像某些文字处理器/文本编辑器应用程序一样神奇地工作。但他们也不这样做!它们只是从用户那里抽象出编辑和重新提交文件到磁盘所涉及的所有复杂机制。

在编写 C++ 源代码时,您现在负责实现这些机制。这并不像在 EOF 处转储一堆退格字符那么简单。 :)

【讨论】:

  • @Tom 是的,这就是我的想法;)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-01-18
  • 2017-03-27
  • 1970-01-01
  • 2019-05-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多