将StringBuilder传递给文件

时间:2011-11-04 10:47:15

标签: c# string file streaming stringbuilder

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

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

4 个答案:

答案 0 :(得分:21)

不要使用StringBuilder,而是尝试使用TextWriter(它具有广泛相似的API,但可以写入多个基础目的地,包括文件) - 即

using(TextWriter writer = File.CreateText(path))
{
    // loop etc
    writer.Write(...);
}

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

using(var writer = File.CreateText(path))
{
    Serialize(writer);
}
...
void Serialize(TextWriter writer)
{
    ...
}

这使得写入不同目标更容易。例如,您现在也可以在内存中执行:

var sw = new StringWriter();
Serialize(sw);
string text = sw.ToString();

重点是:您的Serialize代码无需更改即可容纳不同的目标。这也可以直接写入网络,或通过压缩/加密流写入。非常多才多艺。

答案 1 :(得分:5)

只需使用写入StreamWriter的{​​{1}}:

FileStream

这当然意味着您无法更改已经写入的文本,就像您在using (StreamWriter writer = new StreamWriter("filename.txt")) { ... } 中所做的那样,但我认为您还没有使用它。

答案 2 :(得分:1)

为什么不直接流式传输到流中? 您可以使用TextWriter

答案 3 :(得分:0)

您可以使用StreamWriter直接写入文件。