修复损坏的ZIP文件头部

7

我之前一直在使用Chilkat Zip .Net从我的应用程序中生成备份文件,但是由于该组件出现问题,我改用Xceed Zip .Net执行同样的功能。

如果您尝试使用Xceed、7Zip或WinZip打开由Chilkat生成的Zip文件,则会失败。

如果您使用Chilkat、Windows Zip或WinRar打开相同的文件,则可以成功提取文件。

在维基百科上查看WinZip格式后,我研究了中央目录和本地文件头,发现Chilkat组件错误地将中央目录记录文件大小写入。如果您使用类似FRHed的工具编辑中央记录并使文件大小与本地头大小相同,则一切都会正确提取。

您会建议我做什么?

  1. 使用Chilkat库编写一个小型实用程序,提取Zip文件,然后使用Xceed库重新压缩。
  2. 查找必要的Zip标记(如规范定义),然后纠正中央目录。
  3. 其他组合。
1个回答

2

这取决于你的程序生成了多少备份。 可能更容易通过程序或手动解压/重新压缩它们。 但是,如果有很多文件,则更好的方法是修复中央目录记录字段-您应该编写代码, 1)搜索中央目录; 2)对于每个记录,请转到存储本地文件头的位置,并读取文件大小; 3)返回中央目录并在那里写入有效的文件大小; 4)请注意大型文件,如果它们存在-文件大小超过4Gb的文件会在扩展名中写入。


谢谢。我最终做的就是你所写的,我只是解压了旧备份文件,然后重新压缩它们,但仅在文件本身出现记录错误时才这样做。我制作了一个小应用程序,作为我们应用程序的支持模块交付,以便旧库可供使用。 - Paul Farry
这里提出的问题(来自2010年)早就应该解决了。 - Chilkat Software

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接