私はmemoryStreamインスタンスを持っていて、それは閉じています。メモリストリームの閉じたストリームにアクセスできない、再オープンする方法は?
私はすでに試してみました:
memoryStream.Flush();
memoryStream.Position=0;
メモリストリームを再度開くには、それは動作しません。クローズドメモリストリームを再オープンするにはどうしたらいいですか?
私はmemoryStreamインスタンスを持っていて、それは閉じています。メモリストリームの閉じたストリームにアクセスできない、再オープンする方法は?
私はすでに試してみました:
memoryStream.Flush();
memoryStream.Position=0;
メモリストリームを再度開くには、それは動作しません。クローズドメモリストリームを再オープンするにはどうしたらいいですか?
クローズドメモリストリームを再オープンするにはどうすればよいですか?
ストリームを再度開くことはできません。あなたは、ストリームを「リセット」する必要がある場合は、ちょうどそれに新しいインスタンスを割り当てる:
memoryStream = new MemoryStream();
しかし、クローズドメモリストリームを再利用するにはどうすればよいですか? – olidev
Reedが言ったように、あなたはできません。後で必要な場合は閉じないでください。閉じたという事実を変更できない場合は、新しいものを作成する必要があります。 –
確かに、あなたの質問で示唆したように、ストリームを閉じるのではなく、おそらくFlushとPositionを使うことができますか? –
をあなたは、元が閉じられた場合でも、元のクローンを作成して、クローンを使用することができます。元のものが1000の容量で作成されたとしても、ToArray()は2要素の配列を返します。一方、ToBuffer()はバッファ全体を取得しますが、これはあなたが望まないものです。
MemoryStream original = new MemoryStream(1000);
original.WriteByte(4);
original.WriteByte(5);
MemoryStream dolly = new MemoryStream(original.ToArray());
dolly.Seek(0, SeekOrigin.Begin);
クローンはバッファをコピーしますか?または、同じバッキングバイト[]をポイントするだけですか?閉じたMemoryStreamから長さを取得しようとしています。(愚かなAPIは**と**ストリームを閉じるのは良いと思います...) –
バッファをコピーします。ここでToArray()を参照してください:http://referencesource.microsoft.com/#mscorlib/system/io/memorystream.cs,1a4dcb744a23ba6f –
この試してみてください。それを閉じないでください
memoryStream = new MemoryStream(memoryStream.ToArray());
を?または[MemoryStream.ToArray](http://msdn.microsoft.com/en-us/library/system.io.memorystream.toarray.aspx)を使用して、新しいストリームを作成します。 – dtb
Devn;正式にストリームを終了した場合は、ストリームを再び開くことはできませんが、管理しているものとそのストリームを最初に閉じる必要がある理由を説明するのに役立ちます。最終的に、あなたのストリームで何を達成しようとしていますか? –
@RussClarkeこれは、通常、あるサードパーティのライブラリがあなたのストリームを「有益に」閉じたからです。残念ながら、それは珍しいことではありません。 –