C++中从文件末尾反向读取N行文件记录。

本文介绍了在C++中如何高效地从文件末尾反向读取最近的100行日志记录,避免了全文件扫描和可能破坏日志输出的问题。通过打开文件,将指针移动到最后,然后反向查找换行符,达到指定行数后停止,将找到的记录存入vector,实现了快速显示日志界面的需求。这种方法利用peek函数预览数据,提高效率。
摘要由CSDN通过智能技术生成

最近在实际的开发项目遇到了一个问题,有个24小时在跑的Linux程序,会不断有日志输出,写到一个指定的日志文件中。但是,日志只提供了输出的功能,并没有读取日志文件的功能。如果给程序员自己看日志是很简单的,只需要用tail 或 vi 即可。但是现在有个需求,需要在程序的界面上显示日志文件的内容,而且是最近的100行记录。在网上搜索了一遍,总结一下:

1:从文件头开始,先用getline函数获取每一行,然后再丢弃前面的数据。

 我:不行,日志文件有可能几百MB,全部读一篇再丢弃是行不通的。

2:自己先计算文本有多少行,然后再截取。

我:没有找到具体的实现代码,而且我正在读取这个文件时有可能程序正在输出日志,不能随意破坏文件的输出。


最终没找到合适解决方案,我自己的思路是这样的:

1:打开文件

2:将文件指针移到最后。

3:反向搜索换行符,如果达到100行则停止搜索了。

4:根据当前位置再将一行行记录读取放到vector里。

5:现在可以将vector里的记录进行处理。


实现后发现反向读取100的内容还是很快的,0.1毫秒都不用,当然,这要看一行的内容有多少。

而且代码中并不真正去读取字符,只是用C++的io输入流中的peek函数查看数据,效率提高了。

代码如下:


                
  • 0
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值