Добрый день. Возникла задача - использовать zip файлы в программе на c#. Нужна поддержка паролей при разархивировании, поэтому установил Ionic.Zip.
Код такой:
using Ionic.Zip;
using System;
using System.IO;
using System.Text;
namespace zipExtractor
{
class Program
{
static void Main(string[] args)
{
var isDebugMode = true;
var zipFileName = "archive.zip";
var passWord = "password";
var filesList = "1.txt";
//magic
using (ZipFile zip = ZipFile.Read(zipFileName, new ReadOptions { Encoding = Encoding.GetEncoding("cp866") }))
{
foreach (ZipEntry e in zip)
{
if (e.FileName==filesList)
{
e.ExtractWithPassword(ExtractExistingFileAction.OverwriteSilently, passWord);
if (isDebugMode)
{
Console.WriteLine($"{e.FileName}");
}
}
}
}
Console.ReadKey();
}
}
}
Протестировал на разных архивах. Если в архиве есть русские символы, то вылетает исключение
Ionic.Zip.BadPasswordException: "bad password", т.е. неверный пароль. Посмотрел как кодируется пароль через Advanced Archive Password Recovery, пароль "
пароль" отобразился как "
43f 430 440 43e 43b 44c", т.е. юникод.
Пробовал конвертировать строку перед разархивированием, не помогло. Как побороть это?