这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。
因此,总的来说,我建议您寻找其他解决方案来解决您的问题。除非您确定底层流是什么,并且您可以阅读它......并且事情不会意外地改变您。