はInnerWriter
、TextWriter
ストリームに書き込む 派生クラスです。そのストリームを開いて、そこからデータを読み取る必要があります。そのストリームを開いて読み取ることができるかどうかは未解決の問題であり、ストリームの種類に大きく依存します。
あなたの例を使用するにtheWriter.InnerWriter
は、から派生したオブジェクトTextWriter
です。しかし、どのようなものかはわかりませんし、TextWriter
それ自体は基になるストリームを公開しません。
が である場合、次のように記述できる場合InnerWriter
がStreamWriter
あります。
var sWriter = theWriter.InnerWriter as StreamWriter;
var stream = sWriter.BaseStream;
var savePosition = stream.Position;
stream.Position = 0;
// now, you can read the stream
// when you're done reading the stream, be sure to reset its position
stream.Position = savePosition;
ただし、十分に注意する必要があります。ベース ストリームを取得して で開くと、をStreamReader
閉じるStreamReader
と基になるストリームが閉じます。その後、次にHtmlTextWriter
書き込みを試みたときに例外がスローされます。
また、ストリームを読み取れない可能性もあります。たとえば、ベース ストリームが の場合、NetworkStream
それを読み取ることはできません。FileStream
または、書き込み専用に開いていた である可能性があります。TextWriter
特定の派生クラスだけでなく、TextWriter
書き込み先のストリームにも完全に依存するため、これを行うための一般的な方法はありません。
たとえば、HtmlTextWriter
は に書き込み、StreamWriter
は に接続され、 にBufferedStream
接続され、GZipStream
最終的に に書き込みますMemoryStream
。
したがって、一般的に、問題に対する他の解決策を探すことをお勧めします。根底にあるストリームが何であるか、そしてそれを読むことができることを確実に知っていない限り...そして、物事が予期せず変化することはありません.