【问题标题】:Remove A Line Of Text With Filestreams (C++)使用文件流删除一行文本 (C++)
【发布时间】:2012-05-21 13:12:20
【问题描述】:

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

有没有一种方法可以完成这项任务而无需读取文件的每个部分?
遵循这个伪代码示例会很棒:

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++ 程序的替代方案。
谢谢。

【问题讨论】:

  • 你的文件中有空格的概念吗?将线条涂白而不是完全去除是否可行?
  • @Potatoswatter 我可以这样做,但问题仍然存在。每次我都会在文件顶部多出一行空白。我尝试将退格键写入文件,但它们仍然作为字符显示在文件中。我想欧内斯特建议的数据库是最好的方法。那,或者可能是一个单独的线程来减少时间。

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


【解决方案1】:

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

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

【讨论】:

  • @Flyphe:您可以将退格字符写入文件。根据读取文件的内容以及处理退格字符的方式,可能它可能“起作用”,但我认为这是例外而不是规则。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多