我遇到Stream
的小问题,我在标题中得到了例外。
我将它放在using
语句中,该语句位于循环中,我看到的大多数帖子只是说删除using
语句并“更新”它:Cannot access a closed Stream of a memoryStream, how to reopen?
在循环的第二次迭代中发生异常。我尝试删除using
语句,但没有效果。
以下是一般概念:
for (blah blah blah)
{
using (Stream strm = externalStreamProvider.GetStream(some params)
{
if (stream.Position != 0) //exception is here on 2nd iteration
...........
}
}
但是,我使用的是Stream,这是抽象的,所以我无法像myStream = new Stream()
那样重新创建它。
我正在使用外部Stream
提供商,因此我无法更改Stream
的提取方式。
有关如何解决此问题的任何想法?
我为任何含糊不清道歉,如果不清楚,请告诉我。
答案 0 :(得分:1)
似乎externalStreamProvider
每次都返回相同的流实例...并且由于您在第一次迭代中关闭它,它在第二次迭代中失败。
如果您希望在每次迭代中使用相同的流,则应该在循环之外获取流:
using (Stream strm = externalStreamProvider.GetStream(some params)
{
for (blah blah blah)
{
if (stream.Position != 0)
...........
}
}
编辑:刚看到这条评论:
当
stream.Position
上引发异常时,它是第二次迭代的全新Stream实例
在这种情况下,唯一的解释是externalStreamProvider
正在返回已经关闭的流;但问题不在你发布的代码中......