2011-08-29 23 views
6

Tôi có một phương pháp với một Stream cho đầu vào:Làm cách nào để biết liệu luồng có bị đóng không?

public void Export(Stream finalOutPutStream) 

Đối với mục đích thử nghiệm, tôi gọi nó với một dòng bộ nhớ, như thế này:

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

Nhưng khi, trong phương pháp này, tôi muốn để viết trên dòng bộ nhớ này, tôi nhận được một ObjectDisposedException.

Luồng này không được đính kèm trong tuyên bố sử dụng, tôi không gọi rõ ràng .Dispose().

Điều gì đã xảy ra?

Cảm ơn :)

- EDIT: xấu của tôi, vấn đề là từ các nhà văn của bên thứ ba (DotNetZip). Ngoại lệ xảy ra khi tôi gọi zip.Save (new MemoryStream()). Tôi sẽ đặt câu hỏi của tôi trên diễn đàn của họ. Xin lỗi và cảm ơn sự giúp đỡ.

+0

Làm thế nào để bạn viết thư cho dòng? Nếu, ví dụ, bạn quấn 'finalOutPutStream' của bạn trong một' StreamWriter', đóng 'StreamWriter' cũng sẽ đóng luồng bên dưới. –

+0

ngoại lệ xảy ra tại thời điểm tôi viết, trước khi trình ghi luồng được đóng. Nhưng cảm ơn, tôi không biết rằng các dòng cơ bản sẽ đóng cửa quá! –

+0

Bạn có ngoại lệ bên trong phương thức 'Export'? –

Trả lời

4

Bạn có thể kiểm tra tính khả dụng của luồng bằng cách sử dụng: CanRead, CanSeek, CanWrite thuộc tính.

+1

tất cả chúng đều đúng –

+0

Tôi đang tìm cách xác định điều này. Tôi đang trao luồng cho một lớp khác. Trong khi đúng là không có gì khác nên cố gắng tùy ý sử dụng luồng, loại khó kiểm thử của đơn vị đó có chức năng đặt hàng luồng đã đóng và sau đó có tất cả các thuộc tính đó trả về true. :/ – IAbstract

+0

CanRead của luồng từ quá trình đóng luôn trả về True – biv

-6

nếu bạn đặt việc tạo ra dòng bên sử dụng nó sẽ làm việc đóng cửa và phát hành tài nguyên cho bạn EX:

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

OP không yêu cầu cách đóng/hủy luồng. – IAbstract

Các vấn đề liên quan