2013-04-15 4 views
1

메서드에 전달되는 HtmlTextWriter 개체 (theWriter)가 있습니다. 이 방법은 중간 계층에 있습니다. theWriter의 내용을 디버그 모드에서 읽고 싶습니다. 방법 : Panel : WebControl에서 상속받은HTMLTextWriter의 내용을 보는 방법은 무엇입니까?

protected override void Render (HtmlTextWriter theWriter) {...} 

입니다.

나는

theWriter.Flush(); 
theWriter.InnerWriter.ToString(); 

을 시도했지만 것으로 만 개체 유형 출력 : "System.Web.HttpWriter을". 일부 예제에서는 Response 객체에 메서드를 사용하는 것을 보았습니다. 하지만이 계층에서는 응답에 액세스 할 수 없습니다. 어떤 아이디어?

답변

2

InnerWriterTextWriter입니다.이 클래스는 스트림에 씁니다. 해당 스트림을 열고 스트림을 읽어야합니다. 스트림에서 열어 읽을 수 있는지 여부는 공개적인 질문이며 스트림의 유형에 따라 크게 달라집니다.

예제를 사용하면 theWriter.InnerWriterTextWriter에서 파생 된 개체입니다. 그러나 어떤 종류인지 알지 못하며 TextWriter 자체가 기본 스트림을 노출하지 않습니다. InnerWriterStreamWriter 경우

지금, 당신은 쓸 수 있습니다

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은 다음에 쓰기를 시도 할 때 예외를 throw합니다.

스트림을 읽을 수도 없습니다. 예를 들어 기본 스트림이 NetworkStream 인 경우 읽을 수 없습니다. 또는 쓰기 전용으로 열린 FileStream 일 수 있습니다. 이 작업을 수행하는 일반적인 방법은 없습니다. 특정 TextWriter 파생 클래스뿐만 아니라 TextWriter이 쓰는 스트림에도 전적으로 의존하므로이 작업을 수행하는 일반적인 방법은 없습니다.

예를 들어, HtmlTextWriter 마침내 MemoryStream에 쓰는 GZipStream에 접속 BufferedStream에 접속되는 StreamWriter에 기록 될 수있다.

따라서 일반적으로 문제에 대한 다른 해결책을 찾아 보시기 바랍니다. 기본 스트림이 무엇인지 확실히 알지 못하면 읽고 읽을 수 있습니다. 예기치 않게 변경되지 않습니다.

+1

스트림을 읽는다면 (디버그 모드에서) 스트림 위치를 재설정해야 나중에 프로그램에서 사용할 수 있습니다 (심지어 디버그 모드에서 읽는 것조차도 IRL을 읽는 것처럼 작동합니다. life)) –

+0

디버그 모드에서 어떻게 열고 열 수 있는지 예를 들려 줄 수 있습니까? – 4thSpace

+0

@ 4thSpace : 업데이트 된 답변보기. –