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

C++ 如何删除100行文本文件中的最后一行,而不必重写整个文件?,c++,C++,假设我有一个非常大的文本文件,比如说1亿行或1GB,我想删除最后一行。是否可以在不将9999999行重写为新文件并删除旧文件的情况下执行此操作?假设该文件非常大,以至于重写选项的成本高得令人望而却步。那么,您将如何删除最后一行?谢谢。您可以打开文件,直到找到第一行分隔符(通常为LF或CR/LF,取决于平台),计算该点的文件偏移量。您可以打开文件,直到找到第一行分隔符(通常为LF或CR/LF,取决于平台),计算该点的文件偏移量,和。您应该使用截断函数,但FILE*和iostream都不支持它 但是

假设我有一个非常大的文本文件,比如说1亿行或1GB,我想删除最后一行。是否可以在不将9999999行重写为新文件并删除旧文件的情况下执行此操作?假设该文件非常大,以至于重写选项的成本高得令人望而却步。那么,您将如何删除最后一行?谢谢。

您可以打开文件,直到找到第一行分隔符(通常为LF或CR/LF,取决于平台),计算该点的文件偏移量。

您可以打开文件,直到找到第一行分隔符(通常为LF或CR/LF,取决于平台),计算该点的文件偏移量,和。

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

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

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

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


类似的问题:和

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

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

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

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


类似的问题:和

将文件的大小调整得更小?您的目标是哪个操作系统?跨平台?缩小文件大小?目标是哪个操作系统?跨平台?