使用文件流删除一行文本(C++)

Tre*_*key 3 c++ fstream filestream getline c++11

我有一个大文本文件.
每次我的程序运行时,它需要读取第一行,删除它,并将该数据放回文件的底部.

有没有办法完成这项任务,而无需阅读文件的每个部分?
遵循这个伪代码的例子会很棒:

1. Open file stream for reading/writing
2.   data = first line of file
3.   remove first line from file  <-- can I do this?
4. Close file stream

5. Open file stream for appending
6.   write data to file
7. Close file stream
Run Code Online (Sandbox Code Playgroud)

我试图避免阅读所有内容的原因是因为程序每天在特定时间运行.我不希望每次文件变大时延迟都会更长.

我发现的所有解决方案都要求程序处理整个文件.如果C++文件流无法实现这一点,那么无论如何,我都可以快速高效地执行C++程序.
谢谢.

Ern*_*ill 5

不幸的是,现代操作系统上没有文件系统可以用来做到这一点.从文件开头删除内容的唯一方法是将内容复制到新文件,第一位除外.根本没有办法准确地做你想做的事情.

但希望你能做一些重新设计.也许每个条目都可以是数据库中的记录 - 然后可以非常有效地完成重新排序.或者文件可能包含固定大小的记录,您可以使用第二个索引文件来指定记录顺序,因此重新排列文件只是更新索引的问题.