我有一个目录结构,我需要将其写入一个 zip 文件,该文件包含一个在 50 个子目录中重复的文件。当用户下载 zip 文件时,重复的文件需要出现在每个目录中。有没有办法将文件存储在一个 zip 文件中,但在提取时将其下载到子目录中?我不能使用快捷方式。
似乎 Zip 足够聪明,可以识别出我有 50 个重复文件并自动存储一次文件……让这个文件比必要的大 50 倍是愚蠢的!
我有一个目录结构,我需要将其写入一个 zip 文件,该文件包含一个在 50 个子目录中重复的文件。当用户下载 zip 文件时,重复的文件需要出现在每个目录中。有没有办法将文件存储在一个 zip 文件中,但在提取时将其下载到子目录中?我不能使用快捷方式。
似乎 Zip 足够聪明,可以识别出我有 50 个重复文件并自动存储一次文件……让这个文件比必要的大 50 倍是愚蠢的!
在 ZIP 规范中,中央目录中的多个条目可能指向相同的本地标头偏移量。ZIP 应用程序必须预先计算它要添加的文件的 CRC,并在现有 ZIP 文件的中央目录中找到匹配的条目。针对包含大量条目的 ZIP 文件查询 CRC 查找将是一项昂贵的操作。预先计算大文件上的 CRC 也很昂贵(CRC 计算通常在压缩例程期间完成)。
我还没有听说过进行这种优化的特定 ZIP 应用程序。但是,看起来 StuffIt X 格式支持重复文件优化:
StuffIt X 格式支持“重复检测”。将文件添加到存档时,StuffIt 会检测是否存在重复项(即使它们具有不同的文件名),并且无论有多少副本,都只会压缩一次重复项。展开后,StuffIt 会从该实例重新创建所有副本。根据被压缩的数据,它可以显着减少大小和压缩时间。
我只是想澄清一下,Suffit 解决方案仅在压缩为自己的专有格式而不是 ZIP 时删除重复文件。