2011-08-29 17 views
6

Ho un metodo con un flusso per l'ingresso:Come puoi sapere se uno stream è chiuso?

public void Export(Stream finalOutPutStream) 

per scopi di test, io lo chiamo con un flusso di memoria, in questo modo:

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

Ma quando, nel metodo, voglio per scrivere su questo flusso di memoria, ottengo un ObjectDisposedException.

Questo flusso non è incluso in un'istruzione using, non viene richiamato in modo esplicito .Dispose().

Cosa è successo?

Grazie :)

- EDIT: Il mio male, il problema è dallo scrittore di terze parti (DotNetZip). L'eccezione si verifica quando chiamo zip.Save (new MemoryStream()). Farò le mie domande sul loro forum. Scusa, e grazie per l'aiuto.

+0

Come si scrive al flusso? Se, ad esempio, si termina il 'finalOutPutStream' in un' StreamWriter', la chiusura di 'StreamWriter' chiuderà anche il flusso sottostante. –

+0

l'eccezione si verifica nel momento in cui scrivo, prima che lo stream writer sia chiuso. Ma grazie, non sapevo che anche il flusso sottostante sarebbe stato chiuso! –

+0

Si ottiene un'eccezione nel metodo "Esporta"? –

risposta

4

È possibile verificare la disponibilità dello stream utilizzando: CanRead, CanSeek, CanWrite proprietà.

+1

tutti sono veri –

+0

Sto lavorando per capire anche questo. Sto consegnando lo stream ad un'altra classe. Mentre è vero che nient'altro dovrebbe tentare di utilizzare arbitrariamente il flusso, il suo tipo di test unitario difficile verifica la funzionalità di ordinare lo stream chiuso e quindi restituisce tutte quelle proprietà true. :/ – IAbstract

+0

CanRead of stream from closed Il processo restituisce sempre True – biv

-6

se si mette la creazione flusso all'interno del usando lo farà la chiusura e il rilascio di risorse per voi EX:

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

L'OP non sta chiedendo come chiudere/smaltire il flusso. – IAbstract

Problemi correlati