使用SSZipArchive进行压缩解压

作者: 加菲貓的日常 | 来源:发表于2017-03-03 09:59 被阅读699次

    之前使用的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进行压缩解压

        本文链接:https://www.haomeiwen.com/subject/inixgttx.html