Класс .net ZipFile: Как изменить текстовый файл в архиве? - PullRequest
0 голосов
/ 10 июля 2019

У кого-нибудь есть идеи, как изменить текстовый файл в 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? <<
    }
}

1 Ответ

1 голос
/ 10 июля 2019

Нет необходимости извлекать файл для начала. Вы можете сделать это:

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);
  }
}
...