【问题标题】:how to delete the last line in a text file with 100M lines without having to rewrite the whole file?如何在不重写整个文件的情况下删除具有 100M 行的文本文件中的最后一行?
【发布时间】:2014-12-23 09:42:44
【问题描述】:

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

【问题讨论】:

  • 缩小文件大小?
  • 您的目标是哪个操作系统?跨平台?

标签: c++


【解决方案1】:

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

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

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

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

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多