从末尾读取文件

Reading a file from the end

本文关键字:文件 读取      更新时间:2023-10-16

我想从末尾开始逐行读取文件。我看了像fgets这样的c++函数,但文件是反向读取的。

除非文件真的大,否则只需将整个文件读入std::vector<std::string>,然后使用从std::vector<>::rbegin()

得到的reverse_iterator

不幸的是,我不知道有任何内置函数可以反向读取。一种选择是实现自己的算法,如下所示,使用fseek, fread and ftell

  1. 查找最后一个字符
  2. 开始从当前字符
  3. 中搜索NEWLINE字符
  4. 如果不是换行符,在字符串
  5. 中添加字符
  6. 如果换行,则将字符串反转为
  7. 查找前一个字符
  8. 重复步骤2,3,4,5,直到你到达文件的开始。

您可以使用ftell, fseek函数到达最后一个字符,然后到达前一个字符。

如果文件大小较小,请使用MSalters的答案

如果文件大小较大,则必须使用iostream::seekg函数手动执行文件指针簿记。算法应该是这样的:

  1. 查找文件大小
  2. 查找所需的偏移
  3. 查找下一个偏移量