Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/.htaccess/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net ZipFile类:如何修改存档中的文本文件?_.net_Zipfile - Fatal编程技术网

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

.net ZipFile类:如何修改存档中的文本文件?,.net,zipfile,.net,Zipfile,有人知道如何使用.net的ZipFile类修改zip存档中的文本文件吗?我的意思是不需要解压所有东西,修改和再次压缩。到目前为止,读取该文件很容易: using (var zip = ZipFile.Open("ExcelWorkbookWithMacros.xlsm", ZipArchiveMode.Update)) { var entry = zip.GetEntry("xl/_rels/workbook.xml.rels"); if (entry != null)

有人知道如何使用.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? <<
    }
}
使用(var zip=ZipFile.Open(“ExcelWorkbookWithMacros.xlsm”,ZipArchiveMode.Update))
{
var entry=zip.GetEntry(“xl/_rels/workbook.xml.rels”);
if(条目!=null)
{
var tempFile=Path.GetTempFileName();
entry.extractofile(tempFile,true);
var content=File.ReadAllText(tempFile);
content=content.Replace(“xxx”和“);//这就是我需要做的

>>如何保存存档?无需首先提取文件。您可以执行以下操作:

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