C/C++中从文件末尾反向读取N行文件记录(末尾读取文件)
生活随笔
收集整理的這篇文章主要介紹了
C/C++中从文件末尾反向读取N行文件记录(末尾读取文件)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
最近在實際的開發項目遇到了一個問題,有個24小時在跑的Linux程序,會不斷有日志輸出,寫到一個指定的日志文件中。但是,日志只提供了輸出的功能,并沒有讀取日志文件的功能。如果給程序員自己看日志是很簡單的,只需要用tail 或 vi 即可。但是現在有個需求,需要在程序的界面上顯示日志文件的內容,而且是最近的100行記錄。在網上搜索了一遍,總結一下:
1:從文件頭開始,先用getline函數獲取每一行,然后再丟棄前面的數據。
?我:不行,日志文件有可能幾百MB,全部讀一篇再丟棄是行不通的。
2:自己先計算文本有多少行,然后再截取。
我:沒有找到具體的實現代碼,而且我正在讀取這個文件時有可能程序正在輸出日志,不能隨意破壞文件的輸出。
最終沒找到合適解決方案,我自己的思路是這樣的:
1:打開文件
2:將文件指針移到最后。
3:反向搜索換行符,如果達到100行則停止搜索了。
4:根據當前位置再將一行行記錄讀取放到vector里。
5:現在可以將vector里的記錄進行處理。
實現后發現反向讀取100的內容還是很快的,0.1毫秒都不用,當然,這要看一行的內容有多少。
而且代碼中并不真正去讀取字符,只是用C++的io輸入流中的peek函數查看數據,效率提高了。
代碼如下:
---------------------?
?
總結
以上是生活随笔為你收集整理的C/C++中从文件末尾反向读取N行文件记录(末尾读取文件)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: SQL中的条件语句case-when-t
- 下一篇: C/C++unlink函数的使用