假设您有一个要放入 .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 安装中省略了什么。
有一些潜在的解决方案,