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