iOS - File Archive/UnArchive 文件压缩/解压

简介: 1、ZipArchive 方式ZipArchive 只能对 zip 类文件进行压缩和解压缩GitHub 网址:https://github.com/ZipArchive/ZipArchiveZipArchive 使用 ARC添加 ZipArchive // 添加第三方库文件 ZipArchive // 包含系统动态库 libz.

1、ZipArchive 方式

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

  • GitHub 网址:https://github.com/ZipArchive/ZipArchive

  • 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 网址:https://github.com/saru2020/SARUnArchiveANY

  • 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;
        }
目录
相关文章
|
6月前
|
移动开发 前端开发 数据安全/隐私保护
iOS发布证书.p12文件无密码解决办法及导出带密码的新.p12文件方法
iOS发布证书.p12文件无密码解决办法及导出带密码的新.p12文件方法
204 0
|
6月前
|
Linux 数据安全/隐私保护 iOS开发
如何使用 Xcode 打包导出 IPA 文件并进行 iOS 应用内测,无需支付苹果开发者账号费用?
如何使用 Xcode 打包导出 IPA 文件并进行 iOS 应用内测,无需支付苹果开发者账号费用?
|
6月前
|
Web App开发 Go iOS开发
【IOS】教你如何在手机端轻松安装 ipa 文件 -(安装器已失效 21.10)|社区征文
【IOS】教你如何在手机端轻松安装 ipa 文件 -(安装器已失效 21.10)|社区征文
|
6月前
|
Web App开发 Go iOS开发
【IOS】教你如何在手机端轻松安装 ipa 文件 -(安装器已失效 21.10)
【IOS】教你如何在手机端轻松安装 ipa 文件 -(安装器已失效 21.10)
|
6月前
|
iOS开发 开发者
【教程】uni-app iOS 打包解决 profile 文件与私钥证书不匹配问题
【教程】uni-app iOS 打包解决 profile 文件与私钥证书不匹配问题
|
6月前
|
移动开发 监控 小程序
mPaaS常见问题之uniapp ios端云打包的配置config文件如何解决
mPaaS(移动平台即服务,Mobile Platform as a Service)是阿里巴巴集团提供的一套移动开发解决方案,它包含了一系列移动开发、测试、监控和运营的工具和服务。以下是mPaaS常见问题的汇总,旨在帮助开发者和企业用户解决在使用mPaaS产品过程中遇到的各种挑战
188 0
|
6月前
|
缓存 小程序 Android开发
mPaaS问题之iOS调用插件的时候提示没有配置mpaas. Config文件如何解决
mPaaS配置是指在mPaaS平台上对移动应用进行的各项设置,以支持应用的定制化和优化运行;本合集将提供mPaaS配置的操作指南和最佳实践,助力开发者高效管理和调整移动应用的设置。
143 1
|
6月前
|
iOS开发
ipa文件安装到ios系统
ipa文件安装到ios系统
75 0
|
6月前
|
网络安全 开发工具 数据安全/隐私保护
如何把 ipa 文件 (iOS 安装包) 安装到 iPhone 手机上? 附方法汇总
如何把 ipa 文件 (iOS 安装包) 安装到 iPhone 手机上? 附方法汇总
|
11月前
|
开发工具 数据安全/隐私保护 iOS开发
windows电脑创建ios证书和证书profile文件
windows电脑并没有mac的钥匙串工具去创建ios打包证书,也没有mac的xcode工具去上架ios应用,那么假如只有windows电脑能否使用uniapp开发和打包ios的app呢?是可以的,没有mac电脑,我们可以使用香蕉云编去创建ios证书。
213 0
windows电脑创建ios证书和证书profile文件