如何从文件中删除记录?

时间:2011-03-01 14:36:03

标签: c++ file-io std

我想从文本文件中删除一些信息而不移动其所有记录。例如,给出了文本文件customers.txt。它有很多由#分隔符分隔的记录。每条记录包含以;分隔的字段。像这样:1665;John;Smith给定客户ID,我想删除具有相应ID的客户。我可以在文件中找到记录的偏移量和长度,但不知道如何删除它。我必须重写整个文件吗?

注意:我正在使用带有g ++ 4.5和libst4的标准C ++。

2 个答案:

答案 0 :(得分:8)

你有几个选择。 1)重写文件的剩余部分,超过要删除的记录。 2)用一些指示符替换记录,将其删除并在解析文件时处理(如替换用#或其他特殊字符删除的条目)。

答案 1 :(得分:3)

是的,你必须重写整个文件。

我建议使用这个算法:

  • 创建一个临时文件;
  • 对于要删除的每条记录,请将其复制到临时文件中;
  • 将临时文件与原始文件交换。