为什么在C++中有数组时必须完全重写文件?

0 c++ arrays io file fwrite

从我在互联网和书籍上看到的内容,编辑文本文件或任何文件时,文件必须完全重写; 您不能只将数据插入文件并保存.

如果是这样,编程语言中的数组怎么样?在C++中,我可以显式修改数组中间的某些值.对我来说,这似乎是在一组字节中间修改一个或两个字节的演示.

我想到的唯一两种可能的解决方案是

  • 在C++的幕后花絮上有一些时髦的东西,所以看起来只有一两个字节被修改,但实际上数组完全被重写了.
  • 然后,在考虑之后,特别是在输入之后,我意识到前面提到的解决方案似乎真的愚蠢而且完全不正确,因为有地址和指针之类的东西,而且性能听起来很糟糕.所以我想也许文件不是完全重写的; 只重新插入新数据中第一个点之后的所有内容.这对我来说似乎更合理,也是有道理的.

将数据写入文件和将数据写入数组有什么区别?

use*_*031 5

您可以更改数组中特定位置的值,而无需重写整个事物.但是,为了腾出空间,不能在新值之后移动所有内容,也不能在数组中间插入新值.

类似地,您可以覆盖文件的各个部分而不复制它(尽管底层存储技术可能需要重新编写整个存储块以更改该块中的单个字节),但是如果不以某种方式不能插入新数据为它腾出空间.文本编辑器(以及更复杂文件格式的编辑器)是为不保留长度的随机访问修改而设计的,因此它们通常会重写整个文件而不管更改的内容,而不是尝试优化长度保留编辑.