Кто-нибудь знает, как изменить текстовый файл в zip-архиве, используя класс .net ZipFile? Я имею в виду без распаковки всего, изменения и повторного архивирования. Чтение файла пока легко:
using (var zip = ZipFile.Open("ExcelWorkbookWithMacros.xlsm", ZipArchiveMode.Update))
{
var entry = zip.GetEntry("xl/_rels/workbook.xml.rels");
if (entry != null)
{
var tempFile = Path.GetTempFileName();
entry.ExtractToFile(tempFile, true);
var content = File.ReadAllText(tempFile);
content = content.Replace("xxx", ""); // THIS IS WHAT I NEED TO DO
>> How to save back the archive? <<
}
}





Нет необходимости извлекать файл для начала. Ты можешь это сделать:
string entryName = "some entry";
string contents = "";
var entry = zip.GetEntry(entryName);
if (entry != null)
{
using(StreamReader streamReader = new StreamReader(entry.Open()))
{
contents = streamReader.ReadToEnd();
}
contents = contents.Replace("xxx", "");
entry.Delete();
entry = zip.CreateEntry(entryName);
using(StreamWriter streamWriter = new StreamWriter(entry.Open()))
{
streamWriter.Write(contents);
}
}