iOS压缩 解压文件那些事

今天朋友说做解压的时候遇到好些问题,于是帮着看看了,也把自己之前做项目遇到的整理下,让自己跟各位朋友再次遇到少走一些弯路

使用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




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值