从最后读取文件

时间:2011-07-19 12:43:05

标签: c++ file-io

我想从头开始逐行读取文件。我查看了一个像fgets这样的c ++函数,但正在反向读取文件。

3 个答案:

答案 0 :(得分:7)

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

答案 1 :(得分:1)

不幸的是,我不知道任何反向读取的内置函数。一种选择是使用fseek, fread and ftell

实现自己的算法,如下所示
  1. 寻找最后一个角色
  2. 开始从当前角色
  3. 搜索NEWLINE字符
  4. 如果不是换行符,请将字符添加到字符串
  5. 如果换行,则反转字符串以获取行
  6. 寻找上一个角色
  7. 重复步骤2,3,4,5直到您到达文件开头。
  8. 您可以使用ftell, fseek函数来覆盖最后一个字符,然后使用前一个字符。

答案 2 :(得分:0)

如果文件大小很小,请使用MSalters回答。

如果文件很大,则必须使用iostream::seekg函数手动执行filepointer book。算法类似于:

  1. 找到文件大小
  2. 寻求所需的抵消
  3. 寻找下一个偏移量