iOS压缩 解压文件那些事

来源:互联网 发布:推广软件拦截 编辑:程序博客网 时间:2024/04/30 02:48

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

使用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 = [pathstringByAppendingPathComponent:[NSStringstringWithFormat:@"%@.zip", packageName]];

    

    NSData *fileData = [NSDatadataWithContentsOfFile:zipPath];

    NSLog(@"filesize %@==========%lu",packageName,(unsignedlong)fileData.length);

    

    ZipArchive *za = [[ZipArchivealloc] init];

    if ([zaUnzipOpenFile: zipPath]) {

        BOOL ret = [zaUnzipFileTo: path overWrite: YES];

        if (NO == ret){

            NSLog(@"解压失败");

        }else{

            [MyUserDefaultsetUserDefaultWithValue:newAppVersionCodeforKey:packageName];//保存新的版本号Code

            NSFileManager * fileManager = [NSFileManagerdefaultManager];

            [fileManager removeItemAtPath:zipPatherror:nil];//解压完成以后,删除zip

            

//            [self bundleLoadDylibWithPath:[NSString stringWithFormat:@"%@/%@", path, packageName] button:GSMButton];

            [self dlopenLoadDylibWithPath:[NSStringstringWithFormat:@"%@/%@", 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




0 0
原创粉丝点击