2010-08-16 65 views
7

我以前一直在使用Chilkat Zip .Net从我的应用程序生成备份文件,但是在出现组件问题后,转移到Xceed Zip .Net以获得相同的功能。纠正损坏的ZIP文件头文件

如果你拿一个用Chilkat生成的Zip,并尝试使用Xceed,7Zip,WinZip进行提取,那么它会失败。

如果你采用相同的文件并使用Chilkat,Windows Zip,WinRar进行解压缩,那么该文件提取得很好。

阅读维基百科关于WinZip格式我调查了中央目录和本地文件标题,看来奇尔卡特组件写错了中央目录记录文件大小。如果您使用FRHed等编辑中央记录并使文件大小与本地标题大小相同,则所有内容都可以正确提取。

你会推荐我做什么?

  1. 写使用奇尔卡特库提取邮编,然后用Xceed图书馆
  2. 重新压缩读取压缩档寻找必要邮编标志物(如在规范中定义),然后纠正中央一个小工具头。
  3. 其他一些组合。

回答

2

这取决于您的程序生成的备份数量。 也许,从程序或手中解压缩/重新压缩它们可能会更容易。 但是,如果有很多文件,更好的方法是修复中央目录记录字段 - 您应该编写代码,其中搜索中央目录; 2)对于每条记录,转到存储本地文件头的位置,并读取文件大小; 3)回到中央目录并在那里写入有效的文件大小; 4)小心大文件,如果它们是 - 文件大小> 4Gb是以扩展名写入的。

+0

谢谢。我最终做的是你写的东西,我只是解压缩旧的备份文件,然后重新压缩它们,但只有当文件本身在记录中显示错误。我制作了一个小应用程序,作为支持模块提供给我们的应用程序,以便旧图书馆在那里使用。 – 2010-08-24 03:33:57