Hi why using (var sw = new StreamWriter(ms))
回报Cannot access a closed Stream
exception
. Memory Stream
位于此代码之上。
using (var ms = new MemoryStream())
{
using (var sw = new StreamWriter(ms))
{
sw.WriteLine("data");
sw.WriteLine("data 2");
ms.Position = 0;
using (var sr = new StreamReader(ms))
{
Console.WriteLine(sr.ReadToEnd());
}
} //error here
}
修复它的最佳方法是什么?
谢谢
这是因为StreamReader
处理时自动关闭底层流。这using
语句会自动执行此操作。
但是,那StreamWriter
您正在使用的仍在尝试在流上工作(另外,using
作者的声明现在正在尝试处理StreamWriter
,然后尝试关闭流)。
解决此问题的最佳方法是:不要使用using
并且不要丢弃StreamReader
and StreamWriter
. See 这个问题 https://stackoverflow.com/questions/1862261/can-you-keep-a-streamreader-from-disposing-the-underlying-stream.
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());
}
如果你感觉不好sw
and sr
被垃圾收集而不在代码中被丢弃(按照建议),你可以这样做:
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();
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)