2010-03-27 21 views
3

我想在不覆盖任何内容的情况下写入文件。这是一个包含记录的文本文件。当我删除一个特定的记录时,我实际上并没有将它从文件中删除,我只是将信息放在标题中说明它已被删除。我怎样才能做到这一点?如何追加到g ++中的文本开头

+2

我想你是指prepend。 – Cam

回答

2

无法从头开始重写文件而无法附加到文件的开头部分。它必须走到最后(这是有道理的,因为这就是“追加”这个词的意思)。

如果您希望能够在不为该标记预留空间的情况下将记录标记为已删除,则需要将信息放在末尾或重写所有内容。

更明智的做法的确是预留空间 - 例如在每个记录中放置一个“已删除”字段。

+0

如果我在开始的地方预留空白空间,我可以存储有关删除哪些文件的信息,该怎么办? – neuromancer

+0

@Phenom,这就是他的建议。伟大的想法顺便说一句(+1 @迈克尔)。 – Cam

+0

他建议通过在每条记录中放置一个字段预留空间。我实际上是在谈论保留文件前面的空间。 – neuromancer

0

一个可行的办法是,如果有这些记录中通常dissallowed某些字符(好像每个文件是一个记录 - 请纠正我,如果我错了):

使用这些字符结合一些单词标记的编号(例如,##已删除#或#000,如果#是记录中通常不允许的字符)。

然后,只需改写记录开始处发生的任何事情;它已被删除,因此覆盖其中一部分并不重要。

另一方面,如果您预计需要恢复'已删除'的文件,这可能不是一个好主意。顺便说一句 - 如果你在文件末尾添加了被删除的标志,请注意,如果你知道文件大小,就很容易检查它 - 只要看看文件的末尾。