使用SSZipArchive进行压缩解压

之前使用的zipArchive,可以压缩成功,但压缩后的zip文件打不开,所以解压老是失败,而且github上找不到源码了,就使用了星星比较高的SSZipArchive,附上gitbub下载地址:SSZipArchive

步骤:

一:下载并导入源码

          直接下载或者pod均可;直接下载的话导入 SSZipArchive文件夹下的相关内容,有swift和oc两种,按照自身需求加入,但aesminzip两个文件夹是必须添加的

二:导入头文件

         #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];

}

}];


结语:

至此,就完成基本的压缩和解压过程,还有一些方法和参数没有搞懂,有时间再继续研究

你可能感兴趣的:(使用SSZipArchive进行压缩解压)