私はSharpCompressライブラリを使用しています(これは問題ではありません)。私のzipは保護されていないか、パスワードで保護されています(すべて同じパスワード)。私はこのようにそれをコーディングしています:ファイルの読み込み時のファイルストリームの例外(ブロックの使用方法)
using(Stream stream = File.OpenRead(file))
{
try {
reader = ZipReader.Open(stream);
moreFiles = reader.MoveToNextEntry();
} catch (Exception e) {
reader = ZipReader.Open(stream, pwd);
moreFiles = reader.MoveToNextEntry();
}
//rest of code
}
それは常にあいまいな「は無効なヘッダー:XXXXXXXX」上げる、それは私がストリームが開始時ではないと思うので、MoveToNextEntryを呼び出すためにcatchブロックになったときに例外を。
私は使用ブロックを使用しているため、例外内に 'File.OpenRead(file)'を置くことはできません。私が(コメントで示唆されているように)シークを使用すると、オブジェクト参照が設定されていない(おそらくdisposeが呼ばれている)。
このファイルストリームをリセットし、(まだブロックを使用している間も)ファイルストリームが確実に破棄されるようにする方法はありますか?もう一度openを呼び出すとusingブロックが少し不幸になるかどうかはわかりませんでした。
ありがとうございました。
私が設定されていないオブジェクト参照の例外を取得します。おそらく処分はそれから呼ばれたでしょうか? –
SharpCompress 0.11.5で試したところ、うまくいきました。私が試した完全なコードで答えを更新しています。また、パスワード保護の例外を処理するためにcatchステートメントを編集しました。 C#6.0でなければ、whenディレクティブを省略することができます。 –
ありがとう:)私は後でオープンを逃したと思います。 –