1

私が抱えている小さな問題はStream、タイトルに例外があります。

私はusingループ内にあるステートメント内にそれを持っていますが、私が見たほとんどの投稿は、usingステートメントを削除して「更新」するように言っているだけです: memoryStream の閉じたストリームにアクセスできません。

例外は、ループの 2 回目の繰り返しで発生します。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毎回同じストリームインスタンスを返しているようです...そして、最初の反復でそれを閉じたので、2番目に失敗します。

すべての反復で同じストリームを操作することが予想される場合は、ループの外でストリームを取得する必要があります。

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

編集:このコメントを見ました:

例外が発生するstream.Positionと、2回目の反復でStreamの新しいインスタンスになります

この場合、唯一の説明は、externalStreamProvider既に閉じられているストリームを返しているということです。しかし、問題はあなたが投稿したコードにはありません...

于 2013-04-18T20:34:24.000 に答える