假设我有一个非常大的文本文件,例如1亿行或1 GB,我想删除最后一行。无论如何要做到这一点,而不必将99,999,999行重写为新文件并删除旧文件?假设文件非常大,重写选项非常昂贵。你会怎么做才能删除最后一行呢?谢谢。
答案 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/2741329和https://stackoverflow.com/a/15154682/2741329