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代码不需要更改以适应不同的目标.这也可以直接写入网络,或通过压缩/加密流写入.非常多才多艺.
只需使用StreamWriter写入FileStream:
using (StreamWriter writer = new StreamWriter("filename.txt")) {
...
}
Run Code Online (Sandbox Code Playgroud)
这当然意味着你不能改变已经写好的文本,就像你可以做的那样StringBuilder,但我认为你还没有使用它.
| 归档时间: |
|
| 查看次数: |
30629 次 |
| 最近记录: |