2011-08-29 3 views
6

내가 입력 스트림 :스트림이 폐쇄되었는지 어떻게 알 수 있습니까?

테스트 목적으로,이 같은 메모리 스트림을 호출합니다 :

// When 
_exporter.Export(new System.IO.MemoryStream()); 

하지만 때 메서드에서, 싶어요 이 메모리 스트림에 쓰기, 나는 ObjectDisposedException을 얻을.

이 스트림은 using 문으로 묶지 않으므로 명시 적으로 .Dispose()를 호출하지 않습니다.

무슨 일이야?

고마워 :)

- 편집 : 내 나쁜, 문제는 제 3 자 작가 (DotNetZip)입니다. 예외는 내가 zip.Save (new MemoryStream())를 호출 할 때 발생합니다. 나는 그들의 포럼에서 내 질문을 할 것이다. 죄송합니다. 도움을 주셔서 감사합니다.

+0

를? 예를 들어'FinalOutPutStream'을'StreamWriter'에 랩핑하면'StreamWriter'를 닫아도 기본 스트림을 닫을 수 있습니다. –

+0

스트림 작성기가 닫히기 전에 예외가 발생합니다. 하지만 고마워, 나는 그 밑에있는 물줄기도 닫힐 것임을 몰랐다! –

+0

'Export' 메소드 안에서 예외가 발생합니까? –

답변

4

CanRead, CanSeek, CanWrite 속성을 사용하여 스트림 가용성을 확인할 수 있습니다.

+1

그들 모두는 사실입니다 –

+0

나는 이것도 알아 내고 있습니다. 스트림을 다른 클래스에 전달하고 있습니다. 스트림을 임의적으로 사용하려고 시도하는 것은 아무것도 아니지만, 스트림을 순서화하는 기능을 단위 테스트하기 어려울 정도로 엄격하게 테스트 한 다음 모든 속성을 true로 반환해야합니다. :/ – IAbstract

+0

닫힌 프로세스에서 스트림의 CanRead는 항상 True를 반환합니다. – biv

-6

당신은 당신 EX에 대한 폐쇄 및 자원 출시 할 것입니다 사용하여 내부의 스트림 생성을 넣을 경우 : 당신이 스트림에 쓰기 어떻게

using(Stream s = new MemoryStream()) 
{ 
// do your operations 
} 
+1

OP는 스트림을 닫거나 처리하는 방법을 묻지 않습니다. – IAbstract

관련 문제