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

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

我有一个很好的任务,就是如何处理加载到应用程序脚本编辑器中的大型文件(如下所示)VBA为我们的内部产品快速宏)。大多数文件大约300-400 KB,这是很好的加载。但是,当它们超过100 MB时,进程将遇到困难(正如您所期望的)。

所发生的情况是将文件读取并插入到RichTextBox中,然后导航-不要太担心这个部分。

编写初始代码的开发人员只需使用StreamReader并执行

[Reader].ReadToEnd()

这可能需要很长时间才能完成。

我的任务是分解这段代码,将其以块的形式读取到缓冲区中,并显示一个带有取消选项的进度条。

一些假设:

  • 大多数文件将是30-40 MB。
  • 文件的内容是文本(不是二进制),有些是Unix格式,有些是DOS。
  • 一旦检索到内容,我们就知道使用了什么终止符。
  • 没有人担心,一旦它加载的时间,它呈现在丰富文本框。这只是文本的初始负载。

下面是问题:

  • 我是否可以简单地使用StreamReader,然后检查Length属性(所以ProgressMax),然后为设置的缓冲区大小发出一个Read,然后在WITH循环中迭代

    同时

    在后台工作人员内部,所以它不会阻塞主UI线程?完成后,将字符串生成器返回到主线程。
  • 内容将转到StringBuilder。如果长度可用,可以用流的大小初始化StringBuilder吗?

这些(在你的专业意见中)是好主意吗?过去,我在从流中读取内容时遇到了一些问题,因为它总是会错过最后几个字节或什么的,但如果是这样的话,我还会问另一个问题。


潇潇雨雨
浏览 1616回答 3
3回答

慕妹3146593

您说在加载大型文件时,有人要求您显示进度条。这是因为用户真的希望看到文件加载的确切百分比,还是仅仅因为他们希望看到某些事情正在发生的视觉反馈?如果后者是真的,那么解决方案就会简单得多。就这么做reader.ReadToEnd()在后台线程上,并显示一个标题栏类型的进度条,而不是一个正确的进度条.我提出这一点,是因为根据我的经验,情况往往如此。当您正在编写数据处理程序时,用户肯定会对%完成的数字感兴趣,但是对于简单但缓慢的UI更新,他们更有可能只是想知道计算机没有崩溃。*-)
打开App,查看更多内容
随时随地看视频慕课网APP