一、ZIP压缩的两种规范

zip64 格式是标准 zip 格式的扩展,实际上消除了 zip 存档中文件大小和数量的限制。

每种格式允许的最大值总结如下:

Standard Format Zip64 Format
Number of Files Inside an Archive 65,535 2^64 - 1
Size of a File Inside an Archive [bytes] 4,294,967,295 2^64 - 1
Size of an Archive [bytes] 4,294,967,295 2^64 - 1
Number of Segments in a Segmented Archive 999 (spanning) 65,535 (splitting) 4,294,967,295 - 1
Central Directory Size [bytes] 4,294,967,295 2^64 - 1

二、.NET提供的ZIP压缩能力

.NET提供了以下几个类来完成压缩功能,但是没有找到ZIP64的选项;

ZipFile

ZipArchive

ZipArchiveEntry

DeflateStream

GZipStream

三、DotNetZip提供的压缩能力

DotNetZip 是一个快速、免费的类库和工具集,用于处理 zip 文件。使用 VB、C# 或任何 .NET 语言轻松创建、提取或更新 zip 文件。

DotNetZip提供了Zip64Option来控制压缩的格式;默认情况下使用Never,即不使用ZIP64扩展;

    public enum Zip64Option
{
//
// Summary:
// The default behavior, which is "Never". (For COM clients, this is a 0 (zero).)
Default = 0,
//
// Summary:
// Do not use ZIP64 extensions when writing zip archives. (For COM clients, this
// is a 0 (zero).)
Never = 0,
//
// Summary:
// Use ZIP64 extensions when writing zip archives, as necessary. For example, when
// a single entry exceeds 0xFFFFFFFF in size, or when the archive as a whole exceeds
// 0xFFFFFFFF in size, or when there are more than 65535 entries in an archive.
// (For COM clients, this is a 1.)
AsNecessary = 1,
//
// Summary:
// Always use ZIP64 extensions when writing zip archives, even when unnecessary.
// (For COM clients, this is a 2.)
Always = 2
}

我们可以通过以下方式来生成zip压缩文件

        public void ZIPContents(IDictionary<string, string> entrys, string zipFileName)
{
ZipFile zipfile = new ZipFile(zipFileName);
zipfile.UseZip64WhenSaving = Zip64Option.AsNecessary;
foreach (var entry in entrys)
{
zipfile.AddEntry(entry.Key, entry.Value);
} zipfile.Save();
}

四、ZIP64的兼容问题

ZIP64作为一个后来的扩展,虽然有很长的时间了,但是还是有一些操作系统或者开发语言的类库都不支持,从而会造成兼容性问题,最好是Zip64Option.AsNecessary选项,只有在必要的时候自动使用ZIP64位扩展;

最新文章

  1. 新浪云SAE使用入门,教你如何发布自己的网站
  2. 程序设计入门——C语言 第7周编程练习 1多项式加法(5分)
  3. Android开发实战(二十一):浅谈android:clipChildren属性
  4. docker 1.0.0发布以及一个bug依赖apparmor_parser
  5. 在php中,如何将一个页面中的标签,替换为用户想输出的内容
  6. tengine-2.1.0 + GraphicsMagick-1.3.20
  7. 找出链表中倒数第 k 个结点
  8. lintcode 中等题:Submatrix sum is 0 和为零的子矩阵
  9. careercup-树与图 4.2
  10. python 程序穩定性閒談-續集
  11. Type Correlation
  12. 各大oj题目分类(转)
  13. 矩阵赋值实例(matrixAssign)
  14. 【转】adb操作命令详解及大全
  15. 用redis的订阅发布解决了扫码支付实时响应的问题
  16. LyX使用中的一些问题
  17. bzoj 4552 [Tjoi2016&amp;Heoi2016]排序 (二分答案 线段树)
  18. POJ 1456 - Supermarket - [贪心+小顶堆]
  19. 第三百三十节,web爬虫讲解2—urllib库爬虫—实战爬取搜狗微信公众号—抓包软件安装Fiddler4讲解
  20. php前端传过来的json数据丢失 (max_input_vars)

热门文章

  1. 简单a+b
  2. 使用SonarQube对Unity项目进行代码分析的问题记录
  3. [自用初学]c++值传递和引用传递/ *&amp;/ string
  4. UVA10404
  5. What is the Best Python IDE for Data Science?
  6. grub-mkrescue:错误: `mformat` invocation failed
  7. IDEA的安装与使用
  8. SQL相关知识点
  9. awk command
  10. SqlServer提示对象名无效