流 - 无法访问已关闭的流

时间:2013-04-18 19:36:11

标签: c# stream

我遇到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的提取方式。

有关如何解决此问题的任何想法?

我为任何含糊不清道歉,如果不清楚,请告诉我。

1 个答案:

答案 0 :(得分:1)

似乎externalStreamProvider每次都返回相同的流实例...并且由于您在第一次迭代中关闭它,它在第二次迭代中失败。

如果您希望在每次迭代中使用相同的流,则应该在循环之外获取流:

using (Stream strm = externalStreamProvider.GetStream(some params)
{
    for (blah blah blah) 
    { 
        if (stream.Position != 0)
            ...........
    }
}
编辑:刚看到这条评论:

  

stream.Position上引发异常时,它是第二次迭代的全新Stream实例

在这种情况下,唯一的解释是externalStreamProvider正在返回已经关闭的流;但问题不在你发布的代码中......