using (var fileStream = new FileStream(zipFile, FileMode.OpenOrCreate))
                {
                    using (ZipArchive zip = new ZipArchive(fileStream, ZipArchiveMode.Create))
                    {
                        var entry = zip.CreateEntry(/*压缩包内的相对路径*/, CompressionLevel.Fastest);
                        using (Stream zip= entry.Open())
                        {
                            byte[] buffer = new byte[4096];
                            using (FileStream fs = File.OpenRead(aFile))
                            {
                                int sourceBytes;
                                do
                                {
                                    sourceBytes = fs.Read(buffer, 0, buffer.Length);
                                    zip.Write(buffer, 0, sourceBytes);
                                } while (sourceBytes > 0);
                                fs.Close();
                            }
                        }
                    }
                }
ZipArchiveMode为create时,我测试用的6GB文件压缩正常
ZipArchiveMode为update时,zip.Write(buffer, 0, sourceBytes)这里就会报错,显示内存溢出
以前都是用第三方的库,不是很了解.net自带的这个
想问下是为什么create不会报错而update会报错

解决方案 »

  1.   

    去dalao们帮忙看下
      

  2.   

    可能的解释就是Update比Create要更多的空间
    就像很多软件,更新是先把新版本下载回来,再覆盖掉老的版本
    在更新过程中某个时间点,新老版本是同时存在的
      

  3.   

    最主要的是update和create的行为还有不同,现在情况必须要设置为update才可以(create模式会把之前压缩包里的冲掉)
    查找了下关于这方面的资料还很少
      

  4.   

    最主要的是update和create的行为还有不同,现在情况必须要设置为update才可以(create模式会把之前压缩包里的冲掉)
    查找了下关于这方面的资料还很少对于这么大的文件,尝试先看压缩包里存不存在,存在的话先删掉,再更新
      

  5.   


    有想法的dalao们可以踊跃发言啊