2011-08-29 11 views
6

tengo un método con una corriente de entrada:¿Cómo se puede saber si una transmisión está cerrada?

public void Export(Stream finalOutPutStream) 

Para propósitos de prueba, lo llamo con una secuencia de memoria, así:

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

Pero cuando, en el método, quiero para escribir en esta secuencia de memoria, obtengo una ObjectDisposedException.

Este flujo no está encerrado en una declaración using, no llamo explícitamente .Dispose().

¿Qué pasó?

Gracias :)

- EDIT: Mi mal, el problema es de la escritora tercero (DotNetZip). La excepción ocurre cuando llamo zip.Save (new MemoryStream()). Haré mis preguntas en su foro. Lo siento, y gracias por la ayuda.

+0

¿Cómo se escribe a la corriente? Si, por ejemplo, envuelve su 'finalOutPutStream' en un' StreamWriter', al cerrar el 'StreamWriter' también se cerrará la transmisión subyacente. –

+0

la excepción ocurre en el momento en que escribo, antes de que el escritor de flujo esté cerrado. ¡Pero gracias, no sabía que la transmisión subyacente también se cerraría! –

+0

¿Obtiene una excepción dentro del método 'Exportar'? –

Respuesta

4

Puede verificar la disponibilidad de la secuencia usando: CanRead, CanSeek, CanWrite propiedades.

+1

todos ellos son verdaderos –

+0

Estoy trabajando en averiguar esto también. Estoy entregando la transmisión a otra clase. Si bien es cierto que ninguna otra cosa debe intentar usar arbitrariamente la transmisión, es difícil probar la funcionalidad de ordenar la secuencia cerrada y luego tener todas esas propiedades como verdaderas. :/ – IAbstract

+0

CanRead de la secuencia de cerrado El proceso siempre devuelve True – biv

-6

si se pone la creación flujo en el interior de usarlo hará el cierre y liberación de recursos para usted EX:

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

El OP no pregunta cómo cerrar/eliminar la secuencia. – IAbstract

Cuestiones relacionadas