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

时间:2012-05-14 02:00:13

标签: c++ c++11 filestream fstream getline

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

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

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

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

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

1 个答案:

答案 0 :(得分:5)

不幸的是,现代操作系统上的文件系统都没有设计用于实现此目的。从文件开头删除内容的唯一方法是将内容复制到新文件,第一位除外。没有办法准确地做你想做的事。

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