博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
iOS - File Archive/UnArchive 文件压缩/解压
阅读量:6526 次
发布时间:2019-06-24

本文共 6145 字,大约阅读时间需要 20 分钟。

1、ZipArchive 方式

  • ZipArchive 只能对 zip 类文件进行压缩和解压缩

  • GitHub 网址:

  • ZipArchive 使用 ARC

  • 添加 ZipArchive

    // 添加第三方库文件    ZipArchive    // 包含系统动态库    libz.tbd (libz.dylib)    // 包含头文件    #import "ZipArchive.h"
  • ZipArchive 压缩

    • 文件压缩

      // 目标路径    NSString *destinationFilePath = @"/Users/JHQ0228/Desktop/test.zip";    // 源路径,待压缩的文件                                NSArray *resourcesFilePaths = @[@"/Users/JHQ0228/Desktop/test1.rtf",                                  @"/Users/JHQ0228/Desktop/test2.rtf"];    BOOL result = [SSZipArchive createZipFileAtPath:destinationFilePath                                    withFilesAtPaths:resourcesFilePaths];
    • 文件夹压缩

      // 目标路径    NSString *destinationFilePath = @"/Users/JHQ0228/Desktop/test.zip";    // 源路径,待压缩的文件夹    NSString *resourcesDirPath = @"/Users/JHQ0228/Desktop/test";    BOOL result = [SSZipArchive createZipFileAtPath:destinationFilePath                             withContentsOfDirectory:resourcesDirPath];
  • ZipArchive 解压缩

    • 普通解压

      // 源路径,待解压缩的文件    NSString *resourcesFilePath = @"/Users/JHQ0228/Desktop/test.zip";    // 目标路径    NSString *destinationDirPath = @"/Users/JHQ0228/Desktop/test";    BOOL result = [SSZipArchive unzipFileAtPath:resourcesFilePath                                   toDestination:destinationDirPath];
    • 密码解压

      // 源路径,待解压缩的文件    NSString *resourcesFilePath = @"/Users/JHQ0228/Desktop/test.zip";    // 目标路径    NSString *destinationDirPath = @"/Users/JHQ0228/Desktop/test";    BOOL result = [SSZipArchive unzipFileAtPath:resourcesFilePath                                   toDestination:destinationDirPath                                       overwrite:YES                                        password:@"password"                                           error:nil];
    • 协议解压

      // 源路径,待解压缩的文件    NSString *resourcesFilePath = @"/Users/JHQ0228/Desktop/test.zip";    // 目标路径    NSString *destinationDirPath = @"/Users/JHQ0228/Desktop/test";    BOOL result = [SSZipArchive unzipFileAtPath:resourcesFilePath                                   toDestination:destinationDirPath                                        delegate:self];
    • 协议密码解压

      // 源路径,待解压缩的文件    NSString *resourcesFilePath = @"/Users/JHQ0228/Desktop/test.zip";    // 目标路径    NSString *destinationDirPath = @"/Users/JHQ0228/Desktop/test";    BOOL result = [SSZipArchive unzipFileAtPath:resourcesFilePath                                   toDestination:destinationDirPath                                       overwrite:YES                                        password:@"password"                                           error:NULL                                        delegate:self];
    • 协议方法

      - (void)zipArchiveProgressEvent:(unsigned long long)loaded total:(unsigned long long)total {        NSLog(@"%f", (float)loaded/total);    }

2、SARUnArchiveANY 方式

  • SARUnArchiveANY 可以对 .zip, .rar, .7z 类文件进行压缩和解压缩。

  • GitHub 网址:

  • SARUnArchiveANY 使用 ARC

  • 添加 SARUnArchiveANY

    // 添加第三方库文件    SARUnArchiveANY    // 包含系统动态库    libz.tbd (libz.dylib)    // 包含头文件    #import "SARUnArchiveANY.h"    #import "LZMAExtractor.h"
  • SARUnArchiveANY 解压缩

    - (void)unZip {        NSString *filePath = [[NSBundle mainBundle] pathForResource:@"Zip_Example" ofType:@"zip"];        NSString *destPath = [self applicationDocumentsDirectory];        [self unArchive:filePath andPassword:nil destinationPath:destPath];    }    - (void)unRar {        NSString *filePath = [[NSBundle mainBundle] pathForResource:@"example" ofType:@"rar"];        NSString *destPath = [self applicationDocumentsDirectory];        [self unArchive:filePath andPassword:nil destinationPath:destPath];    }    - (void)unZip_pwd {        NSString *filePath = [[NSBundle mainBundle] pathForResource:@"Zip_Example_pwd" ofType:@"zip"];        NSString *destPath = [self applicationDocumentsDirectory];        [self unArchive:filePath andPassword:@"SARUnArchiveANY_ZIP" destinationPath:destPath];    }    - (void)unRar_pwd {    NSString *filePath = [[NSBundle mainBundle] pathForResource:@"example_pwd" ofType:@"rar"];        NSString *destPath = [self applicationDocumentsDirectory];        [self unArchive:filePath andPassword:@"SARUnArchiveANY_RAR" destinationPath:destPath];    }    - (void)Unzip7z {        NSString *archiveFilename = @"example.7z";        NSString *archiveResPath = [[NSBundle mainBundle] pathForResource:archiveFilename ofType:nil];        NSAssert(archiveResPath, @"can't find .7z file");        NSString *destPath = [self applicationDocumentsDirectory];        [self unArchive:archiveResPath andPassword:nil destinationPath:destPath];    }    - (void)unArchive: (NSString *)filePath andPassword:(NSString*)password destinationPath:(NSString *)destPath {        NSAssert(filePath, @"can't find filePath");        SARUnArchiveANY *unarchive = [[SARUnArchiveANY alloc] initWithPath:filePath];        if (password != nil && password.length > 0) {            unarchive.password = password;        }        if (destPath != nil) {            // (Optional). If it is not given, then the file is unarchived in the same location of its archive/file.            unarchive.destinationPath = destPath;        }        unarchive.completionBlock = ^(NSArray *filePaths) {            NSLog(@"For Archive : %@", filePath);            if ([[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:@"US Presidents://"]]) {                NSLog(@"US Presidents app is installed.");                [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"US Presidents://"]];            }            for (NSString *filename in filePaths) {                NSLog(@"File: %@", filename);            }        };        unarchive.failureBlock = ^(){            NSLog(@"Cannot be unarchived");        };        [unarchive decompress];    }    - (void)handleFileFromURL:(NSString *)filePath {        NSLog(@"*********       FILES FROM THE OTHER APPS       *********");        [self unArchive:filePath andPassword:nil destinationPath:nil];    }    - (NSString *) applicationDocumentsDirectory {        NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);        NSString *basePath = ([paths count] > 0) ? [paths objectAtIndex:0] : nil;        return basePath;    }

转载地址:http://agnbo.baihongyu.com/

你可能感兴趣的文章
在Android中创建文件
查看>>
爬虫基础
查看>>
JS组件系列——再推荐一款好用的bootstrap-select组件,亲测还不错
查看>>
getopt--parse command line options
查看>>
闭包和OC的block的本质
查看>>
MySQL出现Waiting for table metadata lock的场景浅析
查看>>
C# 语言历史版本特性(C# 1.0到C# 7.1汇总更新)
查看>>
什么是数据埋点?
查看>>
git回滚
查看>>
vue2.0 引用qrcode.js实现获取改变二维码的样式
查看>>
Python 判断闰年,判断日期是当前年的第几天
查看>>
web.xml 中的listener、 filter、servlet 加载顺序
查看>>
MyBatis原理简介和小试牛刀
查看>>
js部分基础
查看>>
脏读,幻读,不可重复读解释和例子
查看>>
Tomcat指定(JDK路径)JAVA_HOME而不用环境变量
查看>>
银行卡信息安全事件频发 互联网站成数据泄露"重灾区"
查看>>
云服务器 ECS 使用OpenAPI管理ECS:使用OpenAPI弹性创建ECS实例
查看>>
写个软件来防止服务器网站CPU百分百
查看>>
智能城市里,“公共电话亭”的存在意味着什么?
查看>>