首页 > 解决方案 > C# 使用 zip 归档 System.IO.Compression 创建 zip 文件

问题描述

这是我想要实现的功能

我正在使用 System.IO.Compression ZipArchive来实现这一点。从文档中,我没有找到一个好的用例。文档中的示例假定 zip 文件存在。

我想要做什么创建 zipArchive 流将 JSON 文件和 pdf 文件作为 zip 文件中的条目写入。

using (var stream = new FileStream(path, FileMode.Create))
{
   using (var archive = new ZipArchive(stream, ZipArchiveMode.Create, true))
   {
     ZipArchiveEntry manifest = archive.CreateEntry(filenameManifest);

     using (StreamWriter writerManifest = new StreamWriter(manifest.Open()))
     {
       writerManifest.WriteLine(JSONObject_String);
     }

     ZipArchiveEntry pdfFile = archive.CreateEntry(filenameManifest);
     using (StreamWriter writerPDF = new StreamWriter(pdfFile.Open()))
     {
       writerPDF.WriteLine(pdf);
     }
   }
 }

标签: c#.netziparchive

解决方案


你不关闭stream,你用' manifest.Open()'打开。那么它可能没有将所有内容都写入 zip。

将其包裹在另一个中using,如下所示:

using (var stream = new FileStream(path, FileMode.Create))
{
   using (var archive = new ZipArchive(stream, ZipArchiveMode.Create, true))
   {
     ZipArchiveEntry manifest = archive.CreateEntry(filenameManifest);
     using (Stream st = manifest.Open())
     {
         using (StreamWriter writerManifest = new StreamWriter(st))
         {
            writerManifest.WriteLine(JSONObject_String);
         }
     }

     ZipArchiveEntry pdfFile = archive.CreateEntry(filenameManifest);
     using (Stream st = manifest.Open())
     {
         using (StreamWriter writerPDF = new StreamWriter(st))
         {
            writerPDF.WriteLine(pdf);
         }
     }
   }
 }

推荐阅读