@KislyFan
инженер, связист и просто любитель выпить

Как изменить файл внутри zip архива?

У меня есть множество архивов, в каждом три файлика. Из них два нужно изменить.

// Открываю архив
using (ZipArchive archive = new ZipArchive(ms, ZipArchiveMode.Update))
{
	// idxs - memoryStream указывающие на файлы которые надо изменить
	foreach (var idx in idxs)
	{	//десериализация xml
		var msIndex = Deserialize.SerializeObjAlt(idx.Value);
		// удаляем старый файл
		ZipArchiveEntry Entry0 = archive.GetEntry(idx.Key);
		Entry0.Delete();
		// создаем новый файл
		ZipArchiveEntry Entry1 = archive.CreateEntry(idx.Key);
		using (var writer = Entry1.Open())
		{
			msIndex.Position = 0;
			msIndex.CopyTo(writer);
		}
	}
}


Но к сожалению не работает - архив без изменений. Что могло пойти не так ??
  • Вопрос задан
  • 783 просмотра
Пригласить эксперта
Ответы на вопрос 2
@KislyFan Автор вопроса
инженер, связист и просто любитель выпить
Просто добавьте Flush
using (var writer = Entry1.Open())
    {
      msIndex.Position = 0;
      msIndex.CopyTo(writer);
      writer.Flush();
    }
Ответ написан
Комментировать
Ogoun
@Ogoun
Programmer
1. Создать временный каталог
2. Распаковать в него файлы
3. Изменить файлы
4. Упаковать каталог в архив
5. Удалить временный каталог

В пространстве имен System.IO.Compression.FileSystem.dll, есть удобный класс ZipFile, который умеет и упаковывать и распаковывать каталоги.

ZipFile.CreateFromDirectory(tmp, zipPath);
ZipFile.ExtractToDirectory(zipFile, targetFolder);
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы