流-无法访问已关闭的流

本文关键字:访问 | 更新日期: 2023-09-27 18:10:00

我与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返回一个已经关闭的流;但是问题不在于你发布的代码…