我与Stream
有一个小问题,我在标题中得到例外。
我有它里面的using
语句,这是一个循环内,和大多数帖子我看到只是说删除using
语句和"更新"它:无法访问一个内存流的关闭流,如何重新打开?
异常发生在循环的第二次迭代时。我已经尝试删除using
语句没有效果。
大致思路如下:
for (blah blah blah)
{
using (Stream strm = externalStreamProvider.GetStream(some params)
{
if (stream.Position != 0) //exception is here on 2nd iteration
...........
}
}
然而,我正在使用流,这是抽象的,所以我不能像myStream = new Stream()
一样重新创建它。
我正在使用外部Stream
提供程序,所以我不能改变Stream
的获取方式。
对如何解决这个问题有什么想法吗?
我为我的含糊其词道歉,如果有不清楚的地方请告诉我。
似乎externalStreamProvider
每次都返回相同的流实例…由于您在第一次迭代中关闭了它,因此它在第二次迭代中失败了。
如果你希望在每次迭代中使用相同的流,你应该在循环之外获得流:
using (Stream strm = externalStreamProvider.GetStream(some params)
{
for (blah blah blah)
{
if (stream.Position != 0)
...........
}
}
编辑:刚刚看到这个评论:
当在
stream.Position
上引发异常时,在第二次迭代时它是一个全新的Stream实例
在这种情况下,唯一的解释是externalStreamProvider
返回一个已经关闭的流;但是问题不在于你发布的代码…