C # создать zip-файл, используя zip-архив System.IO.Compression - PullRequest
0 голосов
/ 29 октября 2018

Вот функциональность, которую я хочу достичь

  • Написать файл 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);
     }
   }
 }

1 Ответ

0 голосов
/ 30 октября 2018

Вы не закрываете stream, вы открываете 'manifest.Open()'. Тогда он мог бы не все записать в почтовый индекс.

Оберните его в другой 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);
         }
     }
   }
 }
...