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

时间:2009-08-21 12:36:23

标签: c

使用fopen打开.txt文件时 有没有办法删除文件中的一些字符串而不重写。

例如,这是我将用fopen();

打开的txt文件
-------------
1 some string
2 SOME string
3 some STRING
-------------

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

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

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

3 个答案:

答案 0 :(得分:6)

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

答案 1 :(得分:3)

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

  1. 阅读整个文件
  2. 修改内存中的内容
  3. 回写临时文件
  4. 删除原始文件
  5. 将临时文件重命名为原始文件
  6. 听起来不太不合逻辑。

答案 2 :(得分:1)

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