如何删除100M行的文本文件中的最后一行而不必重写整个文件?

时间:2014-10-28 03:57:35

标签: c++

假设我有一个非常大的文本文件,例如1亿行或1 GB,我想删除最后一行。无论如何要做到这一点,而不必将99,999,999行重写为新文件并删除旧文件?假设文件非常大,重写选项非常昂贵。你会怎么做才能删除最后一行呢?谢谢。

2 个答案:

答案 0 :(得分:3)

您可以打开文件read from the end backwards,直到找到第一行分隔符(通常是LF或CR / LF,具体取决于平台),计算该点的文件偏移量,以及truncate the file to that file offset。 / p>

答案 1 :(得分:2)

您应该使用截断功能,但FILE*iostream都不支持。

但是,较低级别通常有特定于操作系统的功能来截断文件。

如果使用Unix,您可以使用ftruncate,但是您需要找到首先要截断的偏移量(每行是否有固定的大小?)。

请注意,如果您打开FILE*来查找偏移量,则需要确保将其与较低级别同步。您可以简单地fclose该文件,然后在确定的偏移量处以文件的ftruncate打开它重新打开它。

类似问题:https://stackoverflow.com/a/873653/2741329https://stackoverflow.com/a/15154682/2741329