【发布时间】:2013-06-24 16:58:44
【问题描述】:
我们需要在 .NET 中以编程方式创建巨大的 zip 文件。目前我们使用 STL System.IO.Compression.ZipFile.CreateFromDirectory 功能,效果很好,但是当目标存档文件大于 4GB 时,所有存档工具(包括内置 windows zip 支持)都无法正确打开它并认为它是损坏。我也尝试了一些支持 zip64 格式的工具(7zip、TUGZip、DotNetZip 库等),但他们也认为它已损坏。
我仍然可以通过 System.IO.Compression.ZipFile.ExtractToDirectory 函数来提取它。但是,我想避免重新发明轮子并编写自己的工具来从存档中提取选定的文件(每次只需要 1 个日志时完全提取它是不可接受的)
您是否知道任何(最好是免费的)工具可以打开由 ZipFile.CreateFromDirectory 创建的大于 4GB 的 zip 档案?甚至现有代码 sn-ps 用于使用 ZipFile.ExtractToDirectory 非常简单地提取所选文件。
【问题讨论】:
-
你确定是解压的问题吗?有这么多工具说存档已损坏,可能真的是这样,.NET 压缩才是真正的问题?
-
您是否考虑过使用 DotNetZip 进行压缩?我假设它的 ZIP64 支持工作正常并且可以被其他工具打开?
-
@cremor 我总是可以使用补码函数 (ExtractToDirectory) 成功解压缩存档而没有任何问题。所以存档并没有绝对损坏——只是我使用的工具没有“理解”它的格式。此外,此问题仅发生在大于 ~ 4GB 的档案中
-
@RichardSmith 感谢您的建议。我一直在考虑并尝试使用 DetNetZip、SharpZipLib 和其他工具。然而,我们当前的代码是单行代码,不依赖于第三方代码/库 - 我们首先需要确保没有其他解决方法(即使这样,我们也可能会选择使用 System.IO 编写小型专有解压缩工具。压缩功能) - 因为与链接第三方库/代码(尤其是现在 - 部署后)相关的成本(当前和持续)也需要考虑。
标签: .net compression zip