为了账号安全,请及时绑定邮箱和手机立即绑定

用C#中的流读取大文本文件

用C#中的流读取大文本文件

潇潇雨雨 2019-07-05 13:22:36
用C#中的流读取大文本文件我有一个很好的任务,就是如何处理加载到应用程序脚本编辑器中的大型文件(如下所示)VBA为我们的内部产品快速宏)。大多数文件大约300-400 KB,这是很好的加载。但是,当它们超过100 MB时,进程将遇到困难(正如您所期望的)。所发生的情况是将文件读取并插入到RichTextBox中,然后导航-不要太担心这个部分。编写初始代码的开发人员只需使用StreamReader并执行[Reader].ReadToEnd()这可能需要很长时间才能完成。我的任务是分解这段代码,将其以块的形式读取到缓冲区中,并显示一个带有取消选项的进度条。一些假设:大多数文件将是30-40 MB。文件的内容是文本(不是二进制),有些是Unix格式,有些是DOS。一旦检索到内容,我们就知道使用了什么终止符。没有人担心,一旦它加载的时间,它呈现在丰富文本框。这只是文本的初始负载。下面是问题:我是否可以简单地使用StreamReader,然后检查Length属性(所以ProgressMax),然后为设置的缓冲区大小发出一个Read,然后在WITH循环中迭代同时在后台工作人员内部,所以它不会阻塞主UI线程?完成后,将字符串生成器返回到主线程。内容将转到StringBuilder。如果长度可用,可以用流的大小初始化StringBuilder吗?这些(在你的专业意见中)是好主意吗?过去,我在从流中读取内容时遇到了一些问题,因为它总是会错过最后几个字节或什么的,但如果是这样的话,我还会问另一个问题。
查看完整描述

3 回答

?
慕妹3146593

TA贡献1820条经验 获得超9个赞

您说在加载大型文件时,有人要求您显示进度条。这是因为用户真的希望看到文件加载的确切百分比,还是仅仅因为他们希望看到某些事情正在发生的视觉反馈?

如果后者是真的,那么解决方案就会简单得多。就这么做reader.ReadToEnd()在后台线程上,并显示一个标题栏类型的进度条,而不是一个正确的进度条.

我提出这一点,是因为根据我的经验,情况往往如此。当您正在编写数据处理程序时,用户肯定会对%完成的数字感兴趣,但是对于简单但缓慢的UI更新,他们更有可能只是想知道计算机没有崩溃。*-)


查看完整回答
反对 回复 2019-07-05
  • 3 回答
  • 0 关注
  • 1615 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信