小编anr*_*eff的帖子

将两个相同的文件放在 .zip 中时,它们会占用 2 倍的空间,这可以避免吗

假设您有一个要放入 .zip 存档的文件:

zip a1.zip foo.dll
Run Code Online (Sandbox Code Playgroud)

我的测试 .dll 文件是 ~10MB,而存档结果是 3.5MB

然后创建一个内容完全相同的文件,并将它们放入存档中:

cp foo.dll bar.dll
zip a2.zip foo.dll bar.dll
Run Code Online (Sandbox Code Playgroud)

您可能期望 ZIP 足够聪明,可以确定这是重复数据,并且只使用 .zip 中的一个压缩对象,但事实并非如此:a2.zip 是 7.0MB!

基本上,大多数此类实用程序的行为相似(tar.gz、tar.bz2、rar 在solid 模式下)- 只有 7zip 抓住了我,结果 a2.7z 仅略大于 a1.7z。

所以问题是:是否可以构建一个 .zip 文件来避免这种空间浪费?我们使用 C++ 代码创建 .zip 文件,该代码使用来自 zlib 的 minizip 项目。


我们为什么需要这个?

我们以“.exe 安装程序”和“.zip 文件”两种形式提供我们的软件。该软件实际上不需要安装,您只需解压缩并使用它即可。.zip 选项是拥有许多工作站并使用自动部署/软件更新服务的大客户的首选。

我们最近引入了三个 .dll 文件,现在需要放在两个不同的文件夹中,供不同的组件使用(由于技术原因,这些文件只有一个中央目录是不可能的)。这三个 .dll 文件是两个文件夹中的精确副本。.exe 安装程序会解决这个问题,因为我们指示它为两个目标中的每一个使用完全相同的压缩 blob。但 .zip 的情况并非如此,结果安装要大 15MB,这意味着更多的带宽使用、更慢的下载时间和灼热的工程师 - 不高兴 - 事情不是最佳类型的愤怒。此外,.zip 安装突然变得比 .exe 安装大,所以我们会被问到我们在 .exe 安装中省略了什么。

有一些潜在的解决方案,

  • 使用 7-zip:但是老板强烈反对,因为这会迫使上述自动化部署人员修改他们的脚本以适应 7-zip。
  • 使用符号链接:如果将符号链接放在 .zip …

compression zip

9
推荐指数
1
解决办法
3889
查看次数

标签 统计

compression ×1

zip ×1