InnerWriter
是一個TextWriter
衍生類,它寫入流中。您必須打開該流並從中讀取數據。您是否可以打開並閱讀該流是一個懸而未決的問題,並且非常依賴於它的流類型。
因此,要使用您的示例,theWriter.InnerWriter
是從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
,其被連接到連接到一個GZipStream
BufferedStream
,最終寫入到MemoryStream
。
所以,一般來說,我建議你尋找一些解決方案來解決你的問題。除非您確切知道底層流是什麼,並且您可以閱讀它......並且事情不會意外地改變。
此外,如果您讀取流(在調試模式下),您可能必須重置流位置,以便稍後在程序中使用它(甚至在調試模式下讀取它的行爲就像讀取它的IRL一樣生命)) –
你能給出一個例子,說明如何在調試模式下打開和讀取它? – 4thSpace
@ 4thSpace:查看我更新的答案。 –