【问题标题】:Ziparchive: How to close the created entry from ziparchiveZiparchive:如何从 ziparchive 关闭创建的条目
【发布时间】:2018-08-07 05:18:37
【问题描述】:

我已经编写了如下方法将多个 Memorystream 绑定到 ziparchive。该代码适用于一个流,但如果我通过迭代添加多个流,则会在 for 循环的第二行显示以下错误。

 System.IO.IOException: 'Entries cannot be created 
 while previously created entries are still open.' 

我的代码,

 using (var zip = new ZipArchive(outputStream, ZipArchiveMode.Create, 
 leaveOpen: false))
  {

        for (int i = 0; i < msList.Count; i++)
        {
          msList[i].Position = 0;
         var createenter = zip.CreateEntry("123"+i+".jpg", 
         CompressionLevel.Optimal);
         msList[i].CopyTo(createenter.Open());

         }
   }

【问题讨论】:

    标签: c# memorystream ziparchive


    【解决方案1】:

    可能在打开的Stream 上错过了using

     using (var zip = new ZipArchive(outputStream, ZipArchiveMode.Create, leaveOpen: false))
     {
        for (int i = 0; i < msList.Count; i++)
        {
            msList[i].Position = 0;
            var createenter = zip.CreateEntry("123"+i+".jpg", 
            CompressionLevel.Optimal);
            using (var s = createenter.Open())
            {
                msList[i].CopyTo(s);
            }
        }
    }
    

    【讨论】:

    • 感谢您的帮助和快速响应,但这里的小问题是 zip 文件的数据无法正常打开。它显示“我们不支持这种文件格式”。那么变量“s”应该在“using”关键字之外吗?请帮我解决这个问题
    • 你试过搜索错误吗?哪里抛出异常?您在查看之前关闭了 zip 存档吗?
    • 不,我试过你的代码,没有抛出异常。这意味着我得到了最终的输出文件作为 zip。但我无法从 zip 文件中打开文件。如果我删除了使用“(var s =)....”的代码,那么我可以打开 zip 中的文件。
    • 我遇到了问题,但不知道解决方案请帮我解决这个问题。问题:如果我将内存流用作列表,则文件格式无法正常工作。我不知道为什么,但如果我提到 (msList[i].Position = 0;) 它不能正常工作。那么你能帮我解决这个问题吗? @Stukselbax
    • @MdAslam 你应该先自己尝试一下。如果您遇到问题并且在网上没有找到解决方案,您应该打开新问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多