Исключение потока файла при чтении 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();
}