.net ZipFile 类:如何修改存档中的文本文件?

Posted

技术标签:

【中文标题】.net ZipFile 类:如何修改存档中的文本文件?【英文标题】:.net ZipFile class: How to modify a text file within an archive? 【发布时间】:2019-07-10 19:06:53 【问题描述】:

有人知道如何使用 .net 的 ZipFile 类修改 zip 存档中的文本文件吗?我的意思是不解压缩所有内容,修改并再次压缩。到目前为止读取文件很容易:

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】:

无需解压文件即可。你可以这样做:

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

【讨论】:

以上是关于.net ZipFile 类:如何修改存档中的文本文件?的主要内容,如果未能解决你的问题,请参考以下文章

存档/压缩文件 python

使用 ZipFile 类从多个文件的 zip 存档中解压缩文件

在python中将文本写入zipfile

在 Java 中修改 ZIP 存档中的文本文件

C#中如何通过ZipFile类操作ZIP文件(压缩、解压)

在python中逐行读取一个大的压缩文本文件