话说在iOS想做个zip解压功能的选择可真多:ZipArchive,ssziparchive,objective-zip。早先的时候就用过ZipArchive还不错,简单粗暴,支持带密码保护的压缩及解压,但是这次我的需要是加密压缩,而且数据量较大,在解压的时候最好能实时解压指定的文件。这么一来objective-zip就是不二的选择了。
objective-zip虽说支持密码方式的压缩和解压,但是有一个问题,它压缩的文件,自己竟然解压不了!系统的命令行的unzip命令也解压不了,通过一个牛掰的软件像better-zip啥的倒时可以。遇到的错误就是:
*** Terminating app due to uncaught exception 'ZipException', reason: 'Error in opening current file in '/Path/to/Archive.zip''
*** First throw call stack:
(0x1722012 0x1107e7e 0x23303 0x2bce 0x98805 0x98764 0x9006e5b7 0x90058d4e)
libc++abi.dylib: terminate called throwing an exception
*** First throw call stack:
(0x1722012 0x1107e7e 0x23303 0x2bce 0x98805 0x98764 0x9006e5b7 0x90058d4e)
libc++abi.dylib: terminate called throwing an exception
用到的代码是:
ZipReadStream *_readFile = [_unzipFile readCurrentFileInZipWithPassword:@"111111"];
这个问题困扰了我挺长时间,也通过代码跳转过去研究过。但是终究没找到问题的根节所在,于是不断的google之下,功夫不负有心人,找到了解决办法:
unzip.c Line 72:
#ifndef NOUNCRYPT
//#define NOUNCRYPT Comment this line, so unzip protected files will be enabled
#endif
//#define NOUNCRYPT Comment this line, so unzip protected files will be enabled
#endif
在unzip.c找到“#define NOUNCRYPT”直接注释之。
然后就是ok了。哎。