【发布时间】:2014-12-23 09:42:44
【问题描述】:
假设我有一个非常大的文本文件,比如 1 亿行或 1 GB,我想删除最后一行。有没有办法做到这一点,而不必将 99,999,999 行重写到新文件并删除旧文件?假设文件真的很大,重写选项非常昂贵。那么你会怎么做才能删除最后一行呢?谢谢。
【问题讨论】:
-
缩小文件大小?
-
您的目标是哪个操作系统?跨平台?
标签: c++
假设我有一个非常大的文本文件,比如 1 亿行或 1 GB,我想删除最后一行。有没有办法做到这一点,而不必将 99,999,999 行重写到新文件并删除旧文件?假设文件真的很大,重写选项非常昂贵。那么你会怎么做才能删除最后一行呢?谢谢。
【问题讨论】:
标签: c++
您应该使用截断函数,但FILE* 和iostream 都不支持。
但是,通常在较低级别有特定于操作系统的函数来截断文件。
如果是 Unix,您可以使用 ftruncate,但您需要先找到要截断的偏移量(每行是否有固定大小?)。
请注意,如果您打开了FILE* 用于查找偏移量,则需要确保将其与较低级别同步。您可以简单地fclose 文件,然后在确定的偏移量处使用打开文件的ftruncate 重新打开它。
类似问题:https://stackoverflow.com/a/873653/2741329 和 https://stackoverflow.com/a/15154682/2741329
【讨论】:
您可以打开文件 read from the end backwards 直到找到第一行分隔符(通常为 LF 或 CR/LF,取决于平台),计算该点的文件偏移量,然后 truncate the file to that file offset。
【讨论】: