将StringBuilder传递给文件

Gre*_*oud 16 c# string streaming stringbuilder file

我需要创建一个大型文本文档.我目前StringBuilder用来制作文件然后打电话File.WriteallText(filename,sb.ToString).不幸的是,这现在开始抛出内存异常.

有没有更好的方法来流式传输StringBuilder文件,还是我应该使用其他一些技术?

Mar*_*ell 21

而不是使用StringBuilder,尝试使用TextWriter(它有一个大致相似的API,但可以写入许多底层目的地,包括文件) - 即

using(TextWriter writer = File.CreateText(path))
{
    // loop etc
    writer.Write(...);
}
Run Code Online (Sandbox Code Playgroud)

更一般地说,值得将知道文件的代码与知道如何写入数据的代码分开,即

using(var writer = File.CreateText(path))
{
    Serialize(writer);
}
...
void Serialize(TextWriter writer)
{
    ...
}
Run Code Online (Sandbox Code Playgroud)

这样可以更容易地写入不同的目标.例如,您现在也可以在内存中执行以下操作:

var sw = new StringWriter();
Serialize(sw);
string text = sw.ToString();
Run Code Online (Sandbox Code Playgroud)

关键是:您的Serialize代码不需要更改以适应不同的目标.这也可以直接写入网络,或通过压缩/加密流写入.非常多才多艺.


Guf*_*ffa 5

只需使用StreamWriter写入FileStream:

using (StreamWriter writer = new StreamWriter("filename.txt")) {
  ...
}
Run Code Online (Sandbox Code Playgroud)

这当然意味着你不能改变已经写好的文本,就像你可以做的那样StringBuilder,但我认为你还没有使用它.