1

我遇到的一个小问题Stream,我在标题中遇到了异常。

我将它放在using一个循环内的语句中,我看到的大多数帖子只是说删除该using语句并“更新”它:无法访问 memoryStream 的封闭流,如何重新打开?

异常发生在循环的第二次迭代中。我试过删除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获取方式。

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

对于任何含糊之处,我深表歉意,如果有不清楚的地方,请告诉我。

4

1 回答 1

1

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

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

using (Stream strm = externalStreamProvider.GetStream(some params)
{
    for (blah blah blah) 
    { 
        if (stream.Position != 0)
            ...........
    }
}

编辑:刚刚看到这个评论:

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

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

于 2013-04-18T20:34:24.000 回答