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