Открыть архив с паролем - 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) По данным исключениям у меня вроде все в порядке... Попробовал создать FileStream
private void Extract()
{
     using (FileStream fs = File.OpenRead(Path + nFile)) { }
...
Все нормально без каких либо ошибок. Прикладываю Path и nFile nFile = @"TEST.rar"; (Полагаю тут @ не нужен, но я... вообщем как то так) Path = @"D:\_\Visual Studio\GitHub\BFPL\TEST RAR"; Попробовал изменить кодировку
using(ZipFile zip = ZipFile.Read(Path + nFile, new ReadOptions { Encoding = Encoding.GetEncoding(1251) }))
            {
                foreach (ZipEntry e in zip)
                {
                    e.ExtractWithPassword(Path, "qwerty");
                }
            }
Но все же "Cannot read that as a ZipFile" (Без кодировки ошибка такая же)

ГЕНИАЛЬНО

Внимательно прочитав слово 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);
                    }
                }
            }
        }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

5   голосов , оценка 4.4 из 5