2

このスニペットはかなり自明である必要があります:

XDocument xd = ....
using (FileStream fs = new FileStream("test.txt", FileMode.Open, FileAccess.ReadWrite))
{
  using (TextWriter tw = new StreamWriter(fs))
  {
    xd.Save(tw);
  }
  fs.Flush();
  fs.SetLength(fs.Position);
}

XDocumentを使用してストリームにシリアル化TextWriterし、終了後にストリームを切り捨てたいと思います。残念ながら、Save()操作によってストリームが閉じられたように見えるため、Flush()呼び出しで例外が生成されます。

現実の世界では、私は実際にファイルにシリアル化するのではなく、自分の制御の及ばない他の種類のストリームにシリアル化するので、最初にファイルを削除するだけの単純なものではありません。

4

3 に答える 3

2

StreamWriterコンストラクターのこのオーバーロードを使用します。最後のパラメーターに注意してください。ストリームを開いたままにするように指示できます。

于 2013-01-31T15:41:58.940 に答える
0

ストリームをSave閉じてよろしいですか? はのTextWriter終わりに閉じられusingます。おそらくこれはうまくいくでしょう:

using (FileStream fs = new FileStream("test.txt", FileMode.Open, FileAccess.ReadWrite))
{
  var TextWriter tw = new StreamWriter(fs);
  try
  {
    xd.Save(tw);
    tw.Flush();
    fs.SetLength(fs.Position);
  }
  finally
  {
    tw.Dispose();
  }
}

TextWriterをフラッシュすると、基になるストリームのフラッシュも発生することに注意してください。をフラッシュするだけFileStreamでは、まだバッファリングされているデータが含まれない場合がありますTextWriter

于 2013-01-31T15:45:39.900 に答える