使用System.Zip.TZipFile
提取ZIP文件时:
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
答案 0 :(得分:4)
参考:The structure of a PKZip file by Florian Buchholz。
您的ZIP文件使用该格式的ZIP64扩展变体进行存储。 Delphi邮政编码不支持ZIP64。
我通过查看本地文件头来推断该文件是ZIP64。压缩和未压缩的大小字段均为0xffffffff
。从上面的参考文献:
要使库支持ZIP64,它需要检测这些条件并从其他标头中读取64位值。 Delphi代码不会尝试读取不存在的0xffffffff
字节。
您需要找到一个不同的ZIP文件库,一个支持ZIP64,以便在这样的ZIP文件上运行。或者,如果您可以安排创建ZIP文件的任何内容使用普通ZIP格式,则可以解决问题。