是流绑定的



我在尝试将我的流分配给另一个流并按以下处理时遇到了一个异常

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被释放之后,您也可以使用该值。

相关内容

  • 没有找到相关文章

最新更新