https://blog.csdn.net/zhengang007/article/details/51019479

2016年03月30日  版权声明:本文为博主原创文章,转载请注明作者和原文链接。 https://blog.csdn.net/zhengang007/article/details/51019479

一、使用详解:

我们在开发app的时候,有时会需要对文件进行压缩和解压的操作,这个时候我们就必须要用到一个第三方的开源库,SSZipArchive ,来对目标文件进行压缩和解压的操作。
SSZipArchive下载链接,引入到工程时需要添加 libz.tbd 库,否则编译时通不过。
压缩:

//压缩
- (void)createZipFile {
//目的路径
NSString *destinationPath = @"/Users/Administrator/Desktop/wzg.zip";//注意是这个是 zip 格式的后缀
//源文件路径
NSString *sourceFilePath = @"/Users/Administrator/Desktop/wzg.txt";
//数组里可以放多个源文件,这些文件会被同一打包成压缩包,到 destinationPath 这个路径下。
if ([SSZipArchive createZipFileAtPath:destinationPath withFilesAtPaths:@[sourceFilePath]]) {
NSLog(@"压缩成功");
}
else {
NSLog(@"压缩失败");
}
}
解压:

//解压
- (void)unzipFile {
//源文件路径
NSString *sourceFilePath = @"/Users/Administrator/Desktop/wzg.zip";
//目的文件路径
NSString *destinationPath = @"/Users/wangzhengang/Desktop/";
//把 sourceFilePath 这个路径下的zip包,解压到这个 destinationPath 路径下
if ([SSZipArchive unzipFileAtPath:sourceFilePath toDestination:destinationPath delegate:self uniqueId:nil]){
NSLog(@"解压成功");
}
else {
NSLog(@"解压失败");
}
}

代理方法:

#pragma mark - SSZipArchiveDelegate
- (void)zipArchiveWillUnzipArchiveAtPath:(NSString *)path zipInfo:(unz_global_info)zipInfo {
NSLog(@"将要解压。");
}

- (void)zipArchiveDidUnzipArchiveAtPath:(NSString *)path zipInfo:(unz_global_info)zipInfo unzippedPath:(NSString *)unzippedPat uniqueId:(NSString *)uniqueId {
NSLog(@"解压完成!");
}

二、SSZipArchive所有方法说明:

@interface SSZipArchive : NSObject

// Unzip 解压
/**
* @param path 源文件
* @param destination 目的文件
* @param uniqueId 标记,用于区别多个解压操作
*
* @return 返回 YES 表示成功,返回 NO 表示解压失败。
*/
+ (BOOL)unzipFileAtPath:(NSString *)path toDestination:(NSString *)destination uniqueId:(NSString *)uniqueId;

/**
* @param path 源文件
* @param destination 目的文件
* @param overwrite YES 会覆盖 destination 路径下的同名文件,NO 则不会。
* @param password 需要输入密码的才能解压的压缩包
* @param error 返回解压时遇到的错误信息
* @param uniqueId 标记,用于区别多个解压操作
*
* @return 返回 YES 表示成功,返回 NO 表示解压失败。
*/
+ (BOOL)unzipFileAtPath:(NSString *)path toDestination:(NSString *)destination overwrite:(BOOL)overwrite password:(NSString *)password error:(NSError **)error uniqueId:(NSString *)uniqueId;

/**
* @param path 源文件
* @param destination 目的文件
* @param delegate 设置代理
* @param uniqueId 标记,用于区别多个解压操作
*
* @return 返回 YES 表示成功,返回 NO 表示解压失败。
*/
+ (BOOL)unzipFileAtPath:(NSString *)path toDestination:(NSString *)destination delegate:(id<SSZipArchiveDelegate>)delegate uniqueId:(NSString *)uniqueId;

/**
* @param path 源文件
* @param destination 目的文件
* @param overwrite YES 会覆盖 destination 路径下的同名文件,NO 则不会。
* @param password 需要输入密码的才能解压的压缩包
* @param error 返回解压时遇到的错误信息
* @param delegate 设置代理
* @param uniqueId 标记,用于区别多个解压操作
*
* @return 返回 YES 表示成功,返回 NO 表示解压失败。
*/
+ (BOOL)unzipFileAtPath:(NSString *)path toDestination:(NSString *)destination overwrite:(BOOL)overwrite password:(NSString *)password error:(NSError **)error delegate:(id<SSZipArchiveDelegate>)delegate uniqueId:(NSString *)uniqueId;

// Zip 压缩
/**
* @param path 目的路径(格式:~/xxx.zip 结尾的路径)
* @param filenames 要压缩的文件路径
*
* @return 返回 YES 表示成功,返回 NO 表示压缩失败。
*/
+ (BOOL)createZipFileAtPath:(NSString *)path withFilesAtPaths:(NSArray *)filenames;

/**
* @param path 目的路径(格式:~/xxx.zip 结尾的路径)
* @param filenames 要压缩的文件目录路径
*
* @return 返回 YES 表示成功,返回 NO 表示压缩失败。
*/
+ (BOOL)createZipFileAtPath:(NSString *)path withContentsOfDirectory:(NSString *)directoryPath;

/**
* 初始化压缩对象
*
* @param path 目的路径(格式:~/xxx.zip 结尾的路径)
*
* @return 初始化后的对像
*/
- (id)initWithPath:(NSString *)path;

/**
* 打开压缩对象
* @return 返回 YES 表示成功,返回 NO 表示失败。
*/
- (BOOL)open;

/**
* 添加要压缩的文件的路径
*
* @param path 文件路径
*
* @return 返回 YES 表示成功,返回 NO 表示失败。
*/
- (BOOL)writeFile:(NSString *)path;

/**
* 向此路径的文件里写入数据
*
* @param data 要写入的数据
* @param filename 文件路径
*
* @return 返回 YES 表示成功,返回 NO 表示失败。
*/
- (BOOL)writeData:(NSData *)data filename:(NSString *)filename;

/**
* 关闭压缩对象
* @return 返回 YES 表示成功,返回 NO 表示失败。
*/
- (BOOL)close;

@end

@protocol SSZipArchiveDelegate <NSObject>

@optional

//将要解压
- (void)zipArchiveWillUnzipArchiveAtPath:(NSString *)path zipInfo:(unz_global_info)zipInfo;
//解压完成
- (void)zipArchiveDidUnzipArchiveAtPath:(NSString *)path zipInfo:(unz_global_info)zipInfo unzippedPath:(NSString *)unzippedPat uniqueId:(NSString *)uniqueId;
//将要解压
- (void)zipArchiveWillUnzipFileAtIndex:(NSInteger)fileIndex totalFiles:(NSInteger)totalFiles archivePath:(NSString *)archivePath fileInfo:(unz_file_info)fileInfo;
//解压完成
- (void)zipArchiveDidUnzipFileAtIndex:(NSInteger)fileIndex totalFiles:(NSInteger)totalFiles archivePath:(NSString *)archivePath fileInfo:(unz_file_info)fileInfo;

@end

三、遇到的问题:

当对要压缩或者要解压的文件的文件名包含有中文文字时,这个时候会出现文件名乱码的问题,或者在目的路径下未能找到解压后的文件的问题。
解决办法:

在 SSZipArchive.m 文件中改一下对 文件路径的编码格式,即可。
更改前:

NSString *strPath = [NSString stringWithCString:filename encoding:NSUTF8StringEncoding];

更改后:

NSStringEncoding enc = CFStringConvertEncodingToNSStringEncoding(kCFStringEncodingGB_18030_2000);

NSString *strPath = [NSString stringWithCString:filename encoding:NSUTF8StringEncoding];

---------------------
作者:飞天舞桐
来源:CSDN
原文:https://blog.csdn.net/zhengang007/article/details/51019479
版权声明:本文为博主原创文章,转载请附上博文链接!

iOS SSZipArchive--压缩与解压缩

https://www.jianshu.com/p/d80fb939d4c4

2018.01.09 16:15* 字数 62 阅读 780评论 2喜欢 1

配置SSZipArchive

导入SSZipArchive后,先编译,会出现如下错误:

 
异常.png

解决方法:
单击项目->Linked Frameworks and Libraries->点击左下角加号->输入libz.tbd->Add,再次编译即可。

 
图示.png

解压缩

NSString *str = @"/Users/mazaiting/Desktop/tomcat.zip";

[SSZipArchive unzipFileAtPath:str toDestination:@"/Users/mazaiting/Desktop/tomcat"];

压缩

[SSZipArchive createZipFileAtPath:@"/Users/mazaiting/Desktop/tomcat1.zip" withContentsOfDirectory:@"/Users/mazaiting/Desktop/tomcat"];

作者:_凌浩雨

链接:https://www.jianshu.com/p/d80fb939d4c4

来源:简书

简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

SSZipArchive的使用详解和遇到的问题的更多相关文章

  1. Podfile文件用法详解

    https://www.jianshu.com/p/b8b889610b7e 2018.01.09 15:51* 字数 2343 阅读 6263评论 3喜欢 34 前言 iOS开发会经常用到cocoa ...

  2. Linq之旅:Linq入门详解(Linq to Objects)

    示例代码下载:Linq之旅:Linq入门详解(Linq to Objects) 本博文详细介绍 .NET 3.5 中引入的重要功能:Language Integrated Query(LINQ,语言集 ...

  3. 架构设计:远程调用服务架构设计及zookeeper技术详解(下篇)

    一.下篇开头的废话 终于开写下篇了,这也是我写远程调用框架的第三篇文章,前两篇都被博客园作为[编辑推荐]的文章,很兴奋哦,嘿嘿~~~~,本人是个很臭美的人,一定得要截图为证: 今天是2014年的第一天 ...

  4. EntityFramework Core 1.1 Add、Attach、Update、Remove方法如何高效使用详解

    前言 我比较喜欢安静,大概和我喜欢研究和琢磨技术原因相关吧,刚好到了元旦节,这几天可以好好学习下EF Core,同时在项目当中用到EF Core,借此机会给予比较深入的理解,这里我们只讲解和EF 6. ...

  5. Java 字符串格式化详解

    Java 字符串格式化详解 版权声明:本文为博主原创文章,未经博主允许不得转载. 微博:厉圣杰 文中如有纰漏,欢迎大家留言指出. 在 Java 的 String 类中,可以使用 format() 方法 ...

  6. Android Notification 详解(一)——基本操作

    Android Notification 详解(一)--基本操作 版权声明:本文为博主原创文章,未经博主允许不得转载. 微博:厉圣杰 源码:AndroidDemo/Notification 文中如有纰 ...

  7. Android Notification 详解——基本操作

    Android Notification 详解 版权声明:本文为博主原创文章,未经博主允许不得转载. 前几天项目中有用到 Android 通知相关的内容,索性把 Android Notificatio ...

  8. Git初探--笔记整理和Git命令详解

    几个重要的概念 首先先明确几个概念: WorkPlace : 工作区 Index: 暂存区 Repository: 本地仓库/版本库 Remote: 远程仓库 当在Remote(如Github)上面c ...

  9. Drawable实战解析:Android XML shape 标签使用详解(apk瘦身,减少内存好帮手)

    Android XML shape 标签使用详解   一个android开发者肯定懂得使用 xml 定义一个 Drawable,比如定义一个 rect 或者 circle 作为一个 View 的背景. ...

随机推荐

  1. 消除点击连接或者按钮或者执行onclick事件时出现的边框

    css中添加 *:not(input) { font-family: sans-serif; font-size-adjust: none; -webkit-user-select: none; -w ...

  2. 构建现代Web应用时究竟是选择传统web应用还是SPA

    在大前端盛行的今天,似乎前后端分离的开发模式才是大势所趋,而SPA的概念更是应运而生.现在随便构建一个web应用程序如果你不是使用SPA的话,就会感觉有点low,但是真的是这样吗?今天这篇文章我们就来 ...

  3. ProgressWheelDialogUtil【ProgressWheel Material样式进度条对话框】

    版权声明:本文为HaiyuKing原创文章,转载请注明出处! 前言 简单封装网络请求时的加载对话框以及上传.下载文件的进度加载对话框. 效果图 代码分析 ProgressWheel : 自定义view ...

  4. java~日期与字符串的转化

    在Java里我们可以通过SimpleDateFormat实现日期类型的格式化,即将它转为指定格式的字符串,当然像YearMonth这种特殊的类型,实现字符串转化最为容易,即直接toString()即可 ...

  5. 深入Go的底层,带你走近一群有追求的人

    目录 缘起 自我介绍的技巧 硬核知识点 什么是plan9汇编 汇编角度看函数调用及返回过程 汇编角度看slice 正确参与Go夜读活动的方式 阅读原文 上周六晚上,我参加了"Go夜读&quo ...

  6. rabbitmq高级消息队列

    rabbitmq使用 什么是消息队列 消息(Message)是指在应用间传送的数据.消息可以非常简单,比如只包含文本字符串,也可以很复杂,可以包含嵌入对象. 消息队列是一种应用间的通信方式,消息发送后 ...

  7. 创建简单的npm脚手架

    前言 vue-cli, webpack-cli 等脚手架是不是用起来爱不释手?自己写了个模版每次来回复制粘贴代码是不是很难维护?如果你是对前端.Node操作有一定的了解,同时也存在以上疑问,那就请尽情 ...

  8. PC打开多个微信

    打开记事本 在哪个盘就打开哪个盘 例如我的D盘 输入这一串 D:CD 微信路径start WeChat.exe&WeChat.exe 保存然后改后缀名为.bat 然后运行 运行前要关掉之前开的 ...

  9. Linux网络相关概念和修改IP地址的方法

    2.1.1  网卡的命名规则 CENTOS6的网卡命名方式:它会根据情况有所改变而非唯一且固定,在CENTOS6之前,网络接口使用连续号码命名: eth0. eth1等,当增加或删除网卡时,名称可能会 ...

  10. Java开发笔记(八十二)注解的基本单元——元注解

    Java的注解非但是一种标记,还是一种特殊的类型,并且拥有专门的类型定义.前面介绍的五种内置注解,都可以找到对应的类型定义代码,例如查看注解@Override的源码,发现它的代码定义是下面这样的: @ ...