Я пишу приложение WPF для рабочего стола (.Net Framework 4.5), и одна из задач - сохранение нескольких файлов в zip-архиве. Я сделал 2 метода. Сначала для создания zip, второй для чтения из него.Как правильно создать ZipArchive?
public static String GetFileContent(String zipPath, String entityName)
{
String retVal = String.Empty;
using (ZipArchive zipfile = ZipFile.OpenRead(zipPath))
{
foreach (ZipArchiveEntry entry in zipfile.Entries)
{
if (entry.Name.ToLower() == entityName)
{
using (StreamReader s = new StreamReader(entry.Open()))
{
retVal = s.ReadToEnd();
break;
}
}
}
}
return retVal;
}
public static void SetArchive(String path, String zipName, Dictionary<String, String> files)
{
using (var fileStream = new FileStream(Path.Combine(path, zipName), FileMode.OpenOrCreate))
{
using (ZipArchive zip = new ZipArchive(fileStream, ZipArchiveMode.Create))
{
foreach (KeyValuePair<String, String> file in files)
{
var entry = zip.CreateEntry(file.Key, CompressionLevel.Optimal);
using (Stream s = entry.Open())
{
byte[] data = Encoding.UTF8.GetBytes(file.Value);
s.Write(data, 0, data.Length);
}
}
}
}
}
Дело в том, что почтовый архив, созданный и далеко менеджер и WinRAR может открыть его, но когда я использую второй метод, чтобы читать его содержание я получаю
Количество записей ожидаемых в Конца центрального каталога не соответствует количеству записей в Центральном каталоге. в System.IO.Compression.ZipArchive.ReadCentralDirectory() в System.IO.Compression.ZipArchive.get_Entries() в Microsoft.MCS.SPPal.Storage.StorageObject.GetFileContent (String zipPath, String entityName) в z: \ Home Inc \ Microsoft.MCS.SPPal \ Microsoft.MCS.SPPal \ Storage \ StorageObject.cs: строка 32 в Microsoft.MCS.SPPal.MainWindow..ctor() в z: \ Home Inc \ Microsoft.MCS.SPPal \ Microsoft.MCS.SPPal \ MainWindow.xaml.cs: линия 48
в рамках эксперимента я создал новый архив в Far Manager и открыл его с помощью метода GetFileContent, и он работает как шарм. Поэтому я думаю, что ошибка должна быть в методе SetArchive.
Любая помощь будет потрясающей, это 3 часа ночи, и я совсем застрял.
P.S: Я знаю, дизайн кода сосать, он был переписан десятки раз.
Вопрос в том, как правильно создать новый ZipArchive. ZipArchive!= SevenZipCompressor. – Bardicer
Это не помогло ответить на вопрос, указанный в названии. – Dave
Это была одна из моих первых сообщений, единственная моя цель - помочь с другим решением, но извините, если мое решение никому не нравится. – Joseph