之前使用的zipArchive,可以压缩成功,但压缩后的zip文件打不开,所以解压老是失败,而且github上找不到源码了,就使用了星星比较高的SSZipArchive,附上gitbub下载地址:SSZipArchive
步骤:
一:下载并导入源码
直接下载或者pod均可;直接下载的话导入 SSZipArchive文件夹下的相关内容,有swift和oc两种,按照自身需求加入,但aes和minzip两个文件夹是必须添加的
二:导入头文件
#import "SSZipArchive.h"
三:压缩
1、压缩后的路径
NSString *zipPath = [NSString stringWithFormat:@"%@/\%@.zip",NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES)[0],@"123"];
2、需要压缩的文件路径或者文件数组
例如:
数组:NSArray *inputPaths = [NSArray arrayWithObjects: [[NSBundle mainBundle] pathForResource:@"文本" ofType:@"txt"],[[NSBundle mainBundle] pathForResource:@"logo" ofType:@"png"],nil];
路径:NSString *sampleDataPath = [[NSBundle mainBundle].bundleURL
URLByAppendingPathComponent:@"image" isDirectory:YES].path; // 注:蓝色文件夹才行
3、压缩
无密码:
BOOL success = [SSZipArchive createZipFileAtPath:@“压缩后路径” withFilesAtPaths:@“要压缩的文件数组”];
BOOL success = [SSZipArchive createZipFileAtPath:@“压缩后路径” withContentsOfDirectory:@“要压缩的文件数”];
有密码:
BOOL success = [SSZipArchive createZipFileAtPath:@“压缩后路径” withFilesAtPaths:@“要压缩的文件数组” withPassword:@“密码” ];
BOOL success = [SSZipArchive createZipFileAtPath:@“压缩后路径” withContentsOfDirectory:@“要压缩的文件数” withPassword:@“密码”];
4、判断是否压缩成功
if (success) {
NSLog(@"压缩成功,路径:%@",_zipPath);
}
四:解压
1、待解压的路径,类似3步骤中压缩后的路径就行
2、解压后的路径、需要创建文件夹
// 解压后文件夹的路径
NSString *unzipPath = [NSString stringWithFormat:@"%@/\%@", NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES)[0],@"解压后文件夹名"];
NSURL *url = [NSURL fileURLWithPath:unzipPath];
// 创建解压文件夹
NSError *pathError = nil;
[[NSFileManager defaultManager] createDirectoryAtURL:url withIntermediateDirectories:YES attributes:nil error:&pathError];
NSLog(@"解压到路径:%@ ",unzipPath);
if (pathError){return;}// 如果创建失败则返回
3、开始解压,可以设置代理,可以直接使用block、或者error获取异常
无密码:
BOOL success = [SSZipArchive unzipFileAtPath: @“要解压的文件路径” toDestination:@“要解压到的路径” overwrite:NO password:@“密码” progressHandler:^(NSString * _Nonnull entry, unz_file_info zipInfo, long entryNumber, long total) {
} completionHandler:^(NSString * _Nonnull path, BOOL succeeded, NSError * _Nullable error) {
if (error) {// 异常}
}];
有密码:
BOOL success = [SSZipArchive unzipFileAtPath: @“要解压的文件路径” toDestination:@“要解压到的路径” overwrite:NO password:@“密码” progressHandler:^(NSString * _Nonnull entry, unz_file_info zipInfo, long entryNumber, long total) {
} completionHandler:^(NSString * _Nonnull path, BOOL succeeded, NSError * _Nullable error) {
if (error) {// 异常}
4、如果成功,取出解压后的文件
// 读取文件夹内容 NSError *error = nil; NSMutableArray*items = [[[NSFileManager defaultManager]
contentsOfDirectoryAtPath:unzipPath
error:&error] mutableCopy];
if (error) {
return;
}
[items enumerateObjectsUsingBlock:^(NSString * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
NSLog(@"解压出来对象:%lu %@",(unsigned long)idx,obj);
// 仅仅是简单判断,方法不好
if ([obj containsString:@".png"]) {
NSLog(@"是图片");
self.imageView.image = [UIImage imageNamed:obj];
}
}];
结语:
至此,就完成基本的压缩和解压过程,还有一些方法和参数没有搞懂,有时间再继续研究