3

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

有没有办法完成这项任务而不必读取文件的每个部分?
遵循这个伪代码示例会很棒:

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++ 程序执行任何快速有效的替代方案。
谢谢。

4

1 回答 1

5

不幸的事实是,现代操作系统上的任何文件系统都没有设计用于执行此操作。从文件开头删除某些内容的唯一方法是将内容复制到新文件中,但第一位除外。根本没有办法精确地做你想做的事。

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

于 2012-05-14T02:03:27.607 回答