Открыть архив с паролем - C#
Формулировка задачи:
Задача
- Прочесть данные и разархивировать их, из заданного архива (архив с паролем). Библиотека - DotNetZip (Ionic.Zip) Архив - nFile Путь - Path Пароль - "qwerty"private void Extract() { using(ZipFile zip = ZipFile.Read(Path + nFile, new ReadOptions {Encoding = Encoding.GetEncoding("cp866")})) { foreach (ZipEntry e in zip) { e.ExtractWithPassword(Path, "qwerty"); } } }
Ошибка
- Необработанное исключение типа "Ionic.Zip.ZipException" в Ionic.Zip.dll Дополнительные сведения: Cannot read that as a ZipFile Строка 3 - "using(ZipFile zip = ZipF..."Вопрос 1.
В чем я не прав?Вопрос 2.
Как "по людски" обработать событие введение неверного пароля?
Использование конкретно DotNetZip НЕ является обязательным параметром. Если вы можете посоветовать что то другое то я с радостью выслушаю.
В задачи стоит
- Открытие архива с паролем
- Извлечение данных
Архивация не интересует.
Нарыл инфу по "ZipFile.Read"
Read Method (fileName, options)
Exception
- Thrown if the zipfile cannot be read. The implementation of this method relies on System.IO.File.OpenRead, which can throw a variety of exceptions, including specific exceptions if a file is not found, an unauthorized access exception, exceptions for poorly formatted filenames, and so on. Как я понял исключения аналогичныSystem.IO.File.OpenRead
File.OpenRead - метод (String) По данным исключениям у меня вроде все в порядке... Попробовал создать FileStreamprivate void Extract() { using (FileStream fs = File.OpenRead(Path + nFile)) { } ...
using(ZipFile zip = ZipFile.Read(Path + nFile, new ReadOptions { Encoding = Encoding.GetEncoding(1251) })) { foreach (ZipEntry e in zip) { e.ExtractWithPassword(Path, "qwerty"); } }
ГЕНИАЛЬНО
Внимательно прочитав слово zip, я осознал что zip, не есть rar. Одна проблема миновала. Вот только... для rar похоже мне нужна будет другая библиотека, да и еще файл - Файл 1.txt вылез из архива в виде - ”*©« 1.txtРешение задачи: «Открыть архив с паролем»
textual
Листинг программы
private void AttemptOpenRar(string Pass) { using (Stream stream = File.OpenRead(Path + nFile)) using (var archive = RarArchive.Open(stream, Options.KeepStreamsOpen, Pass)) { foreach (var entry in archive.Entries) { if (!entry.IsDirectory) { entry.WriteToDirectory(Path, ExtractOptions.ExtractFullPath | ExtractOptions.Overwrite); } } } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д