The InnerWriter
is a TextWriter
-derived class, which writes to a stream. You will have to open that stream and read data from it. Whether you can open and read from that stream is an open question, and depends very much on what type of stream it is.
So to use your example, theWriter.InnerWriter
is an object derived from TextWriter
. But you don't know what kind, and TextWriter
itself doesn't expose the underlying stream.
Now, if InnerWriter
is a StreamWriter
, then you might be able to write:
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;
You have to be very careful, though. If you get the base stream and then open it with a StreamReader
, closing the StreamReader
will close the underlying stream. Then your HtmlTextWriter
will throw an exception the next time you try to write to it.
It's also possible that you won't be able to read the stream. If the base stream is a NetworkStream
, for example, you can't read it. Or it could be a FileStream
that was open for write only. There's no good general way to do this, as it entirely depends not only on the specific TextWriter
-derived class, but also on the stream that the TextWriter
is writing to.
For example, the HtmlTextWriter
could be writing to a StreamWriter
, which is connected to a BufferedStream
connected to a GZipStream
, which finally writes to a MemoryStream
.
So, in general, I'd recommend that you look for some other solution to your problem. Unless you know for sure what the underlying stream is, and that you can read it ... and that things won't change on you unexpectedly.