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
.
Так что, в общем, я бы порекомендовал вам поискать какое-то другое решение вашей проблемы. Если вы точно не знаете, что такое основной поток, и что вы можете его прочитать ... и что ничего не изменится для вас неожиданно.
person
Jim Mischel
schedule
15.04.2013