是否有任何从打开的文件中删除东西的基本方法

当您使用fopen打开.txt文件时是否有任何方法可以删除文件中的某些字符串而无需重写。

例如,这是我将用fopen()打开的txt文件;

------------- 1 some string 2 SOME string 3 some STRING ------------- 

我想删除第一个字符为2的行并将其更改为

 ------------- 1 some string 3 some STRING ------------- 

我的解决方案是; 首先读取所有数据并将它们保存在字符串变量中。 然后使用w模式打开相同的文件。 并且除了第2行之外再次写入数据。(但这不合逻辑我在C中搜索更简单的方法…)(我希望我的英语不是问题)

最简单的方法可能是使用mmap对整个文件进行内存映射。 使用mmap,您可以将文件作为长内存缓冲区访问,您可以使用磁盘上反映的更改进行修改。 然后,您可以找到该行的偏移量,并将文件的整个尾部移回多个字节以覆盖该行。

你不应该覆盖文件,最好是打开另一个(temp)文件,在里面写内容然后删除旧文件并重命名文件。 因此,如果出现问题则更安全。 我认为最简单的方法是

  1. 阅读整个文件
  2. 修改内存中的内容
  3. 写回临时文件
  4. 删除原始文件
  5. 将临时文件重命名为原始文件

听起来不太不合逻辑..

对于顺序文件,无论使用何种技术删除第2行,您仍然必须将文件写回磁盘。