【问题标题】:C# create zip file using zip archive System.IO.CompressionC# 使用 zip 归档 System.IO.Compression 创建 zip 文件
【发布时间】:2019-04-02 19:58:00
【问题描述】:

这是我想要实现的功能

  • 编写 JSON 文件。
  • 编写 PDF 文件。
  • 为这两个文件创建存档

我正在使用 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);
     }
   }
 }

【问题讨论】:

  • 我认为您在使用基于流的方法而不是基于现有文件的方法方面进展顺利。附带说明一下,我建议不要使用 StreamWriters,它更适用于文本文件,而是应用直接复制二进制数据的 Stream.CopyTo 方法。 docs.microsoft.com/en-us/dotnet/api/…

标签: c# .net ziparchive


【解决方案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);
         }
     }
   }
 }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-06-18
    • 1970-01-01
    • 1970-01-01
    • 2010-09-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-21
    相关资源
    最近更新 更多