大きなテキスト文書を作成する必要があります。私は現在StringBuilder
を使用して文書を作成し、次にFile.WriteallText(filename,sb.ToString)
を呼び出します。残念ながら、これは現在、メモリの例外をスローするようになっています。ストリームStringBuilderをファイル
StringBuilder
をファイルにストリームするには、より良い方法がありますか、使用する必要があるその他の技術はありますか?
大きなテキスト文書を作成する必要があります。私は現在StringBuilder
を使用して文書を作成し、次にFile.WriteallText(filename,sb.ToString)
を呼び出します。残念ながら、これは現在、メモリの例外をスローするようになっています。ストリームStringBuilderをファイル
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
コードが異なるターゲットを収容するために変更する必要はありませんでした。これはネットワークに直接書き込むことも、圧縮/暗号化ストリームを使って書き込むこともできます。非常に汎用性があります。
ストリームに直接ストリーミングしないのはなぜですか? TextWriterを使用できます。
StreamWriterを使用して直接ファイルに書き込むことができます。
だけFileStream
に書き込みStreamWriter
を使用します。
using (StreamWriter writer = new StreamWriter("filename.txt")) {
...
}
これはもちろん、あなたがStringBuilder
で行うことができますようにあなたは、すでに書かれているテキストを変更することはできませんが、私が想定していることを意味しますとにかくそれを使用していないということです。
なぜdownvoteですか?あなたが間違っていると思われることを説明しなければ、答えを改善することはできません。 – Guffa
あなたは追加するテキストでFile.WriteAllTextを実行するのではなく、文字列ビルダを使用して一度にすべてを行うことはできますか? –
@Baliは 'WriteAllText'を呼び出すために、すべてのテキストを持つ必要があるので、メモリの問題に役立ちません。 –
@MarcGravellああ、私の間違い、ありがとうMarc –