Esto se debe a la StreamReader
cierra la secuencia subyacente automáticamente cuando siendo eliminado. La instrucción using
hace esto automáticamente.
Sin embargo, el StreamWriter
está utilizando todavía está tratando de trabajar en la corriente (también, la declaración using
para el escritor está tratando de deshacerse de la StreamWriter
, que a su vez está tratando de cerrar la secuencia).
La mejor manera de solucionar esto es: no use using
y no deseche StreamReader
y StreamWriter
. Ver this question.
using (var ms = new MemoryStream())
{
var sw = new StreamWriter(ms);
var sr = new StreamReader(ms);
sw.WriteLine("data");
sw.WriteLine("data 2");
ms.Position = 0;
Console.WriteLine(sr.ReadToEnd());
}
Si se siente mal por sw
y sr
siendo recolección de basura sin ser eliminados de su código (como se recomienda), que podría hacer algo así:
StreamWriter sw = null;
StreamReader sr = null;
try
{
using (var ms = new MemoryStream())
{
sw = new StreamWriter(ms);
sr = new StreamReader(ms);
sw.WriteLine("data");
sw.WriteLine("data 2");
ms.Position = 0;
Console.WriteLine(sr.ReadToEnd());
}
}
finally
{
if (sw != null) sw.Dispose();
if (sr != null) sr.Dispose();
}
Esto puede deberse a que está creando StreamWriter y StreamReader desde el mismo MemoryStream. Puede intentar usar dos MemoryStreams diferentes: una para el lector y otra para el escritor. – NKamrath
Posible duplicado de http://stackoverflow.com/questions/2331675/cannot-access-closed-stream – bytebuster