1

このコードが Slappy という単語を含むメモリ ストリームを生成してはならない理由はありますか?

    private MemoryStream StringBuilderToMemoryStream(StringBuilder source)
    {
        MemoryStream memoryStream = new MemoryStream();
        StreamWriter streamWriter = new StreamWriter(memoryStream);
        streamWriter.Write("slappy");
        return memoryStream;
    }

streamWriter.Write(source.toString());失敗と言っても。

面白いことに、このルーチンを呼び出すメソッドの 1 つでは機能しますが、他のメソッドでは機能しません。

そして、私がそれらを呼び出す順序も違いはありません。

しかし、それでも、動作するメソッドから上記を呼び出しても、出力は空の MemoryStream のままです。

何かご意見は?

4

2 に答える 2

8

ストリームライターをフラッシュしないので、単語がメモリストリームに書き込まれることはありません。

への呼び出しの後に次を追加しますstreamWriter.Write

streamWriter.Flush();

さらに、後でメモリ ストリームからその単語を読み取りたい場合は、必ずその位置をリセットしてください。これは、Write の後、単語の後に配置されるためですslappy

memoryStream.Position = 0;
于 2013-04-22T05:39:24.667 に答える
2

呼び出したくない場合はstreamWriter.Flush();、作成時に StreamWriter の AutoFlush-Property を設定できます。

MemoryStream memoryStream = new MemoryStream();
StreamWriter streamWriter = new StreamWriter(memoryStream)
   {
      AutoFlush = true
   }
于 2013-04-22T05:50:21.090 に答える