相关疑难解决方法(0)

使用StreamWriter将行附加到文件

我想在我的文件中附加行.我正在使用StreamWriter:

StreamWriter file2 = new StreamWriter(@"c:\file.txt");
file2.WriteLine(someString);
file2.Close();
Run Code Online (Sandbox Code Playgroud)

我的文件输出应该是几个字符串彼此相同,但我只有一行,每次运行此代码时都会被覆盖.

有没有办法让StreamWriter附加到现有文件?

c# streamwriter

162
推荐指数
8
解决办法
36万
查看次数

使用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万
查看次数

在HashSet <T>中包含线程安全

看一下.NET源代码Contains中的HashSet<T>类代码,我找不到任何Contains线程安全的原因?

HashSet<T>提前加载了一个值,然后检查Contains多线程.AsParallel()环.

这有什么理由不安全吗?ConcurrentDictionary当我实际上不需要存储值时,我不愿意使用.

c# multithreading hashset

12
推荐指数
2
解决办法
4473
查看次数