Открыть архив с паролем - 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);
}
}
}
}