.NET Ionic.Zip:压缩或未压缩的大小或偏移量超过最大值

时间:2013-02-15 19:09:14

标签: asp.net .net-4.0 windows-server-2008

我有以下设置:

  • Win2008服务器
  • Ionic.zip参考模块
  • 用于构建zip文件的单独驱动器
  • .NET 4.0

Web应用程序即时构建zip包,并允许客户端下载包。

这个系统运作得非常好......直到现在。

最近我们添加了一些较大的文件(2GB到11GB),这些文件在下载到客户端之前都需要包装在一个包中。最初我把这个系统设置为在C上发生:(一个错误)。马上,特别是对于较大的文件,我开始得到“磁盘空间不足”的错误。我做的第一件事是将系统移动到100GB单独驱动器(K :)上。既然这些文件已在Intranet上发布到生产环境,我仍然会收到这些错误。

  1. 我安排了一项任务,每晚清理一次驱动器,所以即使在100GB我也不应该得到错误
  2. C:和K:都有充足的空间
  3. 我还不知道它是C :(一个未知的临时文件夹??)还是K:正在填满
  4. 更新 - 查看事件日志,它是K:正在填满,但是当我检查它时,它不满......所以我假设临时文件问题......或者??
  5. 是否有人可以对此问题有所了解或建议对故障进行排除?

    修改-----------------------

    我认为压缩方法可能有些东西我正在调用文件大小。我现在看到其他错误看起来像:

      

    压缩或未压缩的大小或偏移量超过最大值。考虑在ZipFile实例上设置UseZip64WhenSaving属性。

    我尝试添加行zip.CompressionMethod = Zip64Option.AsNecessary,认为zip64是必要的,但后来我收到错误Unsupported compression method。我不知道这个新信息从哪里开始。我以为ZipDotNet会处理这一切。

    现在用户正在尝试下载此文件,这一点变得越来越紧迫。我现在正在修补一个补丁。

    更多编辑--------------------

    当我意识到普通拉链的尺寸限制为4GB时,有一种DUH时刻。 Zip64的大小限制更大。

    我在代码中添加了行zip.UseZip64WhenSaving = True,这似乎解决了这个问题。到目前为止,没有问题。

1 个答案:

答案 0 :(得分:7)

解决方案围绕着不关注zip文件大小限制。

使用DotNetZip压缩大尺寸文件时,您的asp.net编码会出现以下错误:

  1. 磁盘空间不足
  2. 压缩或未压缩的大小或偏移超过最大值。考虑在ZipFile实例上设置UseZip64WhenSaving属性
  3. 当您看到这些错误时,通过添加以下行来更改您的asp代码可能是个好主意:

    [yourZipReference].UseZip64WhenSaving = Zip64Option.Always
    

    这将更改您的代码以zip64格式保存文件,因此您可能希望在进行此更改之前进行文件大小检查。

    还有另一条线:

    [yourZipReference].CompressionMethod = CompressionMethod.BZip2;// or CompressionMethod.Deflate or CompressionMethod.None
    

    这将导致模块使用适合于该情况的zip压缩方法,但我还没有测试过这个。