2017年上半年,忙碌的半年,直到现在才有时间总结总结之前几个月用到的相关技术,记录下来,跟大家分享。
之前在做一个与H5混合开发的应用时,我负责处理大文件(也就是H5应用包)的下载、解压、MD5校验等工作。下载文件,大家肯定并不陌生,有很多种方法可以完成,大家可以选择自己熟悉或者适合自己项目的下载框架去完成,我使用的是NSURLSession。关于下载的具体细节在这里不再阐述,稍后我会继续写一篇博文主要介绍大文件下载和异步下载并存储问题,今天主要介绍iOS文件的代码解压和压缩问题。
关于解压和压缩,我找到了一个好用的框架ZipArchive。当然,大家有什么好的资源也可以互相交流,在这里我主要讲解关于ZipArchive的使用。
首先,导入ZipArchive文件,其次,将ZipArchive.mm改为使用MRC,在Buid Setting里的Build Phases的Compile Sources找到ZipArchive.mm文件,在它后面添加-fno-obje-arc.最后就是关于ZipArchive的方法的调用了。
导入#import “ZipArchive.h”
1.解压有密码的文件
ZipArchive *za = [[ZipArchive alloc] init];
// 1打开文件,并在内存中解压
if ([za UnzipOpenFile:zipPath Password:@"123"]) {
// 2把解压出的内存写入caches目录
BOOL ret = [za UnzipFileTo:dirPath overWrite:YES];
if (NO == ret){
NSLog(@"%@解压失败",FileName);
}else{
NSLog(@"%@解压成功",FileName);
}
[[NSFileManager defaultManager] removeItemAtPath:zipPath error:nil];
[za UnzipCloseFile];
2.解压无密码的文件
ZipArchive *za = [[ZipArchive alloc] init];
//无密码解压压缩包
if ([za UnzipOpenFile:md5path]) {
BOOL ret = [za UnzipFileTo:dirpath overWrite:YES];
if (NO == ret){
NSLog(@"无密码解压失败");
}else{
NSLog(@"无密码解压成功");
[[NSFileManager defaultManager] removeItemAtPath:md5path error:nil];
}
[za UnzipCloseFile];
}
以上是关于带密码解压和无密码解压的两个方法的调用,其中的zipPath和md5Path是你要解压的zip包的文件路径,dirPath是你解压后的文件保存的路径。
ZipAchive还有两个关于压缩文件的方法,即:
-(BOOL) CreateZipFile2:(NSString*) zipFile;
-(BOOL) CreateZipFile2:(NSString*) zipFile Password:(NSString*) password;
大家可以自己去调用一下试试。