我有一个大文本文件 每次我的程序运行时,它需要读取第一行,删除它,并将该数据放回文件的底部。
有没有办法完成这项任务而无需阅读文件的每一部分?
遵循这个伪代码的例子会很棒:
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 ++程序了。
感谢。
答案 0 :(得分:5)
不幸的是,现代操作系统上的文件系统都没有设计用于实现此目的。从文件开头删除内容的唯一方法是将内容复制到新文件,第一位除外。没有办法准确地做你想做的事。
但希望你能做一些重新设计。也许每个条目都可以是数据库中的记录 - 然后可以非常有效地完成重新排序。或者文件可能包含固定大小的记录,您可以使用第二个索引文件来指定记录顺序,因此重新排列文件只是更新索引的问题。