2011-08-29 22 views
6

Giriş için bir Akışı olan bir yöntemim var:Bir akımın kapalı olup olmadığını nasıl anlarsınız?

public void Export(Stream finalOutPutStream) 

Test amaçları için bunu bir bellek akışıyla adlandırıyorum, şöyle:

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

Ancak, yöntemde, Bu bellek akışına yaz, bir ObjectDisposedException alıyorum.

Bu akış bir ifade deyimiyle çevrilmemiş, açık bir şekilde aramadım. Disket (.).

Ne oldu?

Teşekkürler

- DÜZENLEMEK: Benim hatam, problem üçüncü taraf yazardan (DotNetZip). İstisna, zip.Save (new MemoryStream()) olarak adlandırdığımda olur. Sorularımı kendi forumlarında soracağım. Üzgünüz, yardımlarınız için teşekkürler.

+0

? Örneğin, "finalOutPutStream" inizi bir "StreamWriter" içine sardığınızda, "StreamWriter" in kapanması da alttaki akışı kapatır. –

+0

istisna, yazdığım anda, akım yazıcısı kapanmadan önce olur. Ama teşekkürler, temel akımın da kapalı olacağını bilmiyordum! –

+0

'Export' yönteminin içinde istisna var mı? –

cevap

4

Akış kullanılabilirliğini şu adreste kullanarak kontrol edebilirsiniz: CanRead, CanSeek, CanWrite özellikleri.

+1

hepsi doğru –

+0

Ben de bunu anlamaya çalışıyorum. Akışı başka bir sınıfa veriyorum. Akışın keyfi olarak kullanılmasına hiçbir şey denememenin doğru olduğu doğru olsa da, ünite için zor bir tür, akış sırasını sipariş etme işlevini sınar ve tüm bu özelliklerin doğru döndüğünü test eder. :/ – IAbstract

+0

Aktarılan işlemden akış akışı iş parçacığı her zaman True – biv

-6

Eğer bunu EX için kapanış ve kaynak salımını yapacağız kullanarak içine akışı oluşturma koyarsanız: Eğer akışına yazmak nasıl

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

döndürür OP, akışın nasıl kapatılacağını/atılacağını sormaz. – IAbstract

İlgili konular