今天朋友说做解压的时候遇到好些问题,于是帮着看看了,也把自己之前做项目遇到的整理下,让自己跟各位朋友再次遇到少走一些弯路
>
使用minizip压缩文件
先决条件:
首先下载minizip 的库文件http://www.winimage.com/zLibDll/minizip.html
其次需要添加头文件支持 #include "../../zip.h" #include "../../unzip.h"
另外,要添加库文件的支持 UnzipUD.lib
几个重要的结构
目标文件结构:zipFile zf;
待压缩文件的结构:zip_fileinfo zi;//zip文件信息
几个重要的函数:
打开目标文件:zf = zipOpen(W2CA(strZipFile),0);
添加新的压缩文件:zipOpenNewFileInZip(...)//添加新的压缩文件
将数据写入目标文件:zipWriteInFileInZip (zf,buf,size_read);//写入目标文件中
关闭目标文件:zipClose(zf,NULL);//关闭目标文件
网络资源:
http://blog.csdn.net/yyyzlf/archive/2009/11/19/4833667.aspx
http://ty263.spaces.live.com/blog/cns!AEDC97760A4C885F!156.entry
http://www.vckbase.com/english/code/misc/mapizip.shtml.htm
#pragma mark --zip文件解压
-(void)uncodeZipFile:(NSString *)packageName//解压完成以后删除压缩包
newAppVersionCode:(NSString *)newAppVersionCode//设置新版本
button:(UIButton *)GSMButton{
NSString * path =[NSHomeDirectory()stringByAppendingPathComponent:@"Documents"];
NSString *zipPath = [path stringByAppendingPathComponent:[NSString stringWithFormat:@"%@.zip", packageName]];
NSData *fileData = [NSData dataWithContentsOfFile:zipPath];
NSLog(@"filesize %@==========%lu",packageName,(unsigned long)fileData.length);
ZipArchive *za = [[ZipArchive alloc] init];
if ([za UnzipOpenFile: zipPath]) {
BOOL ret = [za UnzipFileTo: path overWrite: YES];
if (NO == ret){
NSLog(@"解压失败");
}else{
[MyUserDefault setUserDefaultWithValue:newAppVersionCode forKey:packageName];//保存新的版本号Code
NSFileManager * fileManager = [NSFileManager defaultManager];
[fileManager removeItemAtPath:zipPath error:nil];//解压完成以后,删除zip包
// [self bundleLoadDylibWithPath:[NSString stringWithFormat:@"%@/%@", path, packageName] button:GSMButton];
[self dlopenLoadDylibWithPath:[NSString stringWithFormat:@"%@/%@", path, packageName] packageName:packageName button:GSMButton];
}
[za UnzipCloseFile];
}
}
>使用Unrar4iOS
此三方库存在些问题:
1.不支持armv7s;
2.编译好的framework中将Unrar4iOS.h和Unrar4iOS.mm编译在内有些方法并未实现,比如-(BOOL) unrarFileTo:(NSString*) path overWrite:(BOOL) overwrite;该方法的实现居然是空的也就是什么都没做(原作者最终虽然更新了两个文件但是并未重新编译framework);
3.对于第二个问题可能有人会说把Unrar4iOS.h和Unrar4iOS.mm这两个文件重新拉近项目中不就可以了吗?答案是“如果你的项目中other link flags没有设置为-ObjC是可以这么做的,否则的话会报一些标识符重复的错误”。
这时需要做一系列修改:具体做法见下面网址,该博主列的很详细,在此不一一叙述了
http://www.cnblogs.com/zzltjnh/p/3961456.html