这InnerWriter
是一个TextWriter
派生类,它写入流。您必须打开该流并从中读取数据。您是否可以打开并从该流中读取是一个悬而未决的问题,并且很大程度上取决于它是什么类型的流。
因此,使用您的示例,theWriter.InnerWriter
是一个派生自TextWriter
. 但是你不知道是什么类型,而且TextWriter
它本身并没有暴露底层流。
现在,如果InnerWriter
是 a 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
下次尝试写入它时会抛出一个异常。
您也可能无法读取流。例如,如果基本流是 a NetworkStream
,则您无法读取它。或者它可能是一个FileStream
只对写开放的。没有好的通用方法可以做到这一点,因为它不仅完全取决于特定的TextWriter
派生类,还取决于TextWriter
正在写入的流。
例如,HtmlTextWriter
可能正在写入 a StreamWriter
,它连接到BufferedStream
连接到 a 的 a GZipStream
,最终写入 a MemoryStream
。
因此,总的来说,我建议您寻找其他解决方案来解决您的问题。除非您确定底层流是什么,并且您可以阅读它......并且事情不会意外地改变您。