c# - 将 StringBuilder 流式传输到文件

标签 c# string file streaming stringbuilder

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

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

最佳答案

不要使用 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 代码不需要更改以适应不同的目标。这也可以是直接写入网络,或通过压缩/加密流写入。用途广泛。

关于c# - 将 StringBuilder 流式传输到文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8008092/

相关文章:

c# - 使用 TCP 绑定(bind)将非托管 C++ 连接到 WCF

c# - 按 Bars 数选择最受欢迎的 Foo

JavaScript:给定 HTML 字符串中的偏移量和子字符串长度,父节点是什么?

使用scanf的C多维数组大小

c# - 何时使用 InvalidOperationException 或 NotSupportedException?

c# - 我如何操作 NLog 的堆栈级别?

java - 检查回文字符串

string - Bash:如何评估这个字符串?

java - 文件/变量错误 Java

c++ - 使用 QFile 正确读写文件(处理错误等)?