相关疑难解决方法(0)

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

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

发生的事情是将文件读取并推入RichTextBox然后导航 - 不要过于担心这部分.

编写初始代码的开发人员只是使用StreamReader并且正在执行

[Reader].ReadToEnd()
Run Code Online (Sandbox Code Playgroud)

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

我的任务是打破这段代码,将其以块的形式读入缓冲区并显示一个带有取消选项的进度条.

一些假设:

  • 大多数文件将是30-40 MB
  • 文件的内容是文本(非二进制),有些是Unix格式,有些是DOS.
  • 一旦检索到内容,我们就可以找出使用的终结符.
  • 一旦加载了在richtextbox中渲染所需的时间,没有人会担心.这只是文本的初始加载.

现在提问:

  • 我可以简单地使用StreamReader,然后检查Length属性(so ProgressMax)并为set缓冲区大小发出Read并在后台worker 中的while循环WHILST中迭代,这样它就不会阻塞主UI线程?然后在完成后将stringbuilder返回到主线程.
  • 内容将转到StringBuilder.如果长度可用,我可以用流的大小初始化StringBuilder吗?

这些(在您的专业意见中)是好主意吗?我过去曾经有一些问题从Streams读取内容,因为它总会错过最后几个字节或者其他东西,但如果是这样的话,我会问另一个问题.

.net c# stream streamreader large-files

89
推荐指数
9
解决办法
18万
查看次数

标签 统计

.net ×1

c# ×1

large-files ×1

stream ×1

streamreader ×1