Исключение потока файла при чтении zip-файла (как использовать блок)

Я использую библиотеку SharpCompress (это не проблема). Мои почтовые индексы либо незащищены, либо защищены паролем (все с одним и тем же паролем). так что я кодирую это так:

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" всякий раз, когда попадает в блок catch для вызова MoveToNextEntry, потому что я думаю, что поток находится не в начале.

Я не могу поместить File.OpenRead(file) внутри исключения, потому что я использую блок using. Если я использую (как предложено в комментариях) поиск, я получаю не установленную ссылку на объект (предположительно dispose был вызван).

Есть ли способ сбросить этот файловый поток и по-прежнему гарантировать его удаление (при этом используя блок using). Я не знал, вызовет ли вызов open снова, что использование блока также будет немного недоволен.

Благодарю.

1 ответ

Решение

Вы пробовали следующее:

try
{
    reader = ZipReader.Open(stream);
    moreFiles = reader.MoveToNextEntry();
}
catch (CryptographicException e) when (e.Message == "No password supplied for encrypted zip.")
{
    stream.Seek(0, SeekOrigin.Begin);
    reader = ZipReader.Open(stream, pwd);
    moreFiles = reader.MoveToNextEntry();
}
Другие вопросы по тегам