ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

c# – 反向Streamreader

2019-05-18 21:53:18  阅读:211  来源: 互联网

标签:c parsing streamreader


我有一个应用程序,我已经负责清理后.应用程序本身相对简单 – 它运行SQL查询,使用Web服务,并将结果吐出到日志文件中.我的工作是在应用程序完成后将文件存档到我们的NAS.它将文件独占锁定,直到完成它们,因此它增加了一点点复杂性.我也不被允许触摸应用程序,只有日志.无论如何,我的申请很简单:

>如果没有抛出异常,检查文件是否可以打开(捕获IOException)并在bool []中将其标记为可访问.
>浏览标记为true的文件数组,使用ReadLine方法将文件的每一行读入StreamReader.因为应用程序偶尔打嗝并且没有完成,我不能简单地使用IOException来判断文件是否已完成 – 我必须实际解析文本.
>如果找到指示完成的文本,请压缩文件,将存档文件加载到NAS,然后删除原始文件.

我的代码工作,它只是非常耗时(日志文件大约500 MB).我对改进的想法涉及从文件底部而不是从顶部开始我的搜索,但StreamReader不支持这样的方法.我不能使用ReadToEnd方法,然后反向读取,因为这只会引发内存不足异常.有什么想法,我可以加快解析日志文件?

解决方法:

我假设您在文件末尾查找单个标记以确定它是否已完成?如果是这样,我还假设标记具有已知长度,例如单个字节或3个字节的序列等.

如果上述假设是正确的,您可以打开FileStream,Seek到文件的末尾减去预期的标记长度读取字节,如果标记存在并完成,您知道可以处理该文件.

寻求到最后-3个字节可以使用如下代码完成

// Seek -3 bytes starting from the end of the file
fileStream.Seek(-3, SeekOrigin.End);

标签:c,parsing,streamreader
来源: https://codeday.me/bug/20190518/1130090.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有