是否有任何从打开的文件中删除东西的基本方法
当您使用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)文件,在里面写内容然后删除旧文件并重命名文件。 因此,如果出现问题则更安全。 我认为最简单的方法是
- 阅读整个文件
- 修改内存中的内容
- 写回临时文件
- 删除原始文件
- 将临时文件重命名为原始文件
听起来不太不合逻辑..
对于顺序文件,无论使用何种技术删除第2行,您仍然必须将文件写回磁盘。