C#使用zip档案System.IO.Compression创建zip文件

时间:2018-10-29 20:07:41

标签: c# .net ziparchive

这是我想要实现的功能

  • 写一个JSON文件。
  • 写一个PDF文件。
  • 为这两个文件创建档案

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

我想做什么 创建zip存档流,将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);
     }
   }
 }

1 个答案:

答案 0 :(得分:1)

您没有关闭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);
         }
     }
   }
 }