我这里有一个软件会产生txt格式的记录文件,大小几兆的样子,十几万行,每行100左右个字符。
这个记录文件的内容是随时变化的。
我想在ontimer响应函数(不要回调)内用cstudiofile每隔1秒钟读一次这个txt文件。
并取文件的末尾**大约**50行放到cstringarray内,然后处理。
为了尽量在1秒内提取+处理完,请给出尽可能高效的**提取代码**,
最好能加入:预防某次的提取+处理超过1秒的情况,
因为我感觉超过1秒,本次处理会被下次ontime函数强制中断。谢谢。
我想先定位到文件末尾,取文件末尾位置。然后从末尾-5000的位置开始readstring,舍掉第一次readstring可能读到的半行。是否可行?
抱歉了,我要的是代码,大家都没有给出代码,分收回了。
可以用fseek移动函数指针,找到距离文件结束-多少个字节 的地方。至于这个多少个字节,因为1000个字符,如果不是纯英文的,换算成字节会比较困难,所以可以考虑多读取一些,比如你的文字编码是gb2312,那么读取2000个字节足够。
如果是utf8,可以读取4000个字节。读取以后装入CString,再用 Right 函数取即可。
但是如果只有几MB,一次性全部读取到CString再substr实际上也不会超过1s。现在硬盘的读取速度在200MB/s以上,固态硬盘在500MB/s以上,内存CPU的处理速度再快很多倍。
对于这个,如果换个方案思路呢,不是直接读取呢
开启一个线程,维护一个50大小的列表,每次写入时,都往线程里也传入,超了将头部踢掉,尾部插入最新的,这样每1s都读这个缓存 应该快很多。
当需要读取行数变化, 只需调整这个列表大小即可,方便维护,而且性能也容易跟得上。