我在尝试将我的流分配给另一个流并按以下处理时遇到了一个异常
Stream str = new FileStream(somefile, FileMode.OpenOrCreate);
Stream newstr = str;
str.Dispose(); // I disposed only str and not new str
byte[] b = new byte[newstr.Length];// got exception here stating unable to access closed stream...
为什么。。。。。。?我是C#和Stream
的新手,其中Stream
在名称空间System.IO
中。
是的,当您调用str.Dispose
时,newStr
也会被释放。这是因为Stream
和.NET中的所有类一样,都是引用类型。当您编写Stream newstr = str
时,您不是在创建新的Stream
,而是在创建对相同Stream
的新引用。
写这篇文章的正确方法是:
Stream str = new FileStream(somefile, FileMode.OpenOrCreate);
int strLen = str.Length;
str.Dispose();
byte[] b = new byte[strLen];
这将避免任何ObjectDisposedException
。请注意,int
是一种值类型,因此在编写int strLen = str.Length
时,将创建该值的新副本,并将其保存在变量strLen
中。因此,即使在Stream
被释放之后,您也可以使用该值。