当前位置:  开发笔记 > 编程语言 > 正文

System.Zip.TZipFile.ExtractZipFile对某些文件引发错误。为什么?

如何解决《System.Zip.TZipFile.ExtractZipFile对某些文件引发错误。为什么?》经验,为你挑选了1个好方法。

使用以下命令提取ZIP文件时System.Zip.TZipFile

System.Zip.TZipFile.ExtractZipFile('C:\test.zip', 'R:\_TEST\');

对于特定的ZIP文件,我得到以下错误消息框:

流读取错误。

为什么?

再现错误的zip文件,以base64编码:

UEsDBC0ACAAIAHyDiEcAAAAA ////////// 8WABQATmV1ZXMgVGV4dGRva3VtZW50LnR4dAEAEAAA AAAAAAAAAAIAAAAAAAAAAwBQSwcIAAAAAAIAAAAAAAAAAAAAAAAAAABQSwECLQstAAgACAB8g4hH AAAAAP ////////// FgA4AAAAAAABAAAAAAAAAAAATmV1ZXMgVGV4dGRva3VtZW50LnR4dAEAEAAA AAAAAAAAAAIAAAAAAAAACgAgAAAAAAABABgA1LFkAs0x0QHUsWQCzTHRAdSxZALNMdEBUEsFBgAA AAABAAEAfAAAAGIAAAAAAA ==

前往http://www.motobit.com/util/base64-decoder-encoder.asp

将其解码为test.zip到本地存储(不要更改字符集)

解码后的二进制文件的MD5必须为:

7357193E8F27FE1FB5AF2B8B6AF1F24C



1> David Heffer..:

参考:Florian Buchholz的PKZip文件的结构。

您的ZIP文件是使用ZIP64扩展格式的格式存储的。Delphi邮政编码不支持ZIP64。

通过查看本地文件头,我推断出该文件是ZIP64。压缩和未压缩的大小字段均为0xffffffff。根据上面的参考:

压缩大小:如果归档文件为ZIP64格式,则该文件为0xffffffff,长度存储在多余字段中

未压缩的大小:如果存档为ZIP64格式,则此字段为0xffffffff,长度存储在多余的字段中

为了使该库支持ZIP64,它需要检测这些条件并从其他头文件中读取64位值。Delphi代码不这样做,并尝试读取0xffffffff不存在的字节。

您将需要找到另一种ZIP文件库,该文件库支持ZIP64,以便对这样的ZIP文件进行操作。或者,如果可以安排创建ZIP文件的任何文件都使用纯ZIP格式,则可以避开该问题。

推荐阅读
mobiledu2402851173
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有