2011-03-01 138 views
1

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

注:我使用标准C++与g ++ 4.5和libst4。

+0

可能重复的[如何只覆盖部分文件在c + +](http://stackoverflow.com/questions/2530274/how-to-overwrite-only-part-of-a-file-in-c ) – 2011-03-01 14:42:39

+0

@Simone:哎呀。没有看到它。删除了无用的评论。谢谢。 – ereOn 2011-03-01 14:43:45

回答

8

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

+0

+1发布相同,但稍后;) – 2011-03-01 14:44:26

+0

好的。我会替换那样的。 (我只是想知道是否有办法将文件拆分成一些碎片,像操作系统一样......) – 2011-03-01 14:55:30

+0

@sorush没有原生的方式来做到这一点。这并不是说如果你愿意,你不能写一个图书馆去做。 – Lou 2011-03-01 16:02:37

3

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

我建议这个算法:

  • 创建临时文件;
  • 对于每个记录是不是将被删除,将其复制到临时文件中;
  • 将临时文件与原始文件交换。