SSZipArchive的使用详解和遇到的问题
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
配置SSZipArchive
导入SSZipArchive后,先编译,会出现如下错误:

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

解压缩
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的使用详解和遇到的问题的更多相关文章
- Podfile文件用法详解
https://www.jianshu.com/p/b8b889610b7e 2018.01.09 15:51* 字数 2343 阅读 6263评论 3喜欢 34 前言 iOS开发会经常用到cocoa ...
- Linq之旅:Linq入门详解(Linq to Objects)
示例代码下载:Linq之旅:Linq入门详解(Linq to Objects) 本博文详细介绍 .NET 3.5 中引入的重要功能:Language Integrated Query(LINQ,语言集 ...
- 架构设计:远程调用服务架构设计及zookeeper技术详解(下篇)
一.下篇开头的废话 终于开写下篇了,这也是我写远程调用框架的第三篇文章,前两篇都被博客园作为[编辑推荐]的文章,很兴奋哦,嘿嘿~~~~,本人是个很臭美的人,一定得要截图为证: 今天是2014年的第一天 ...
- EntityFramework Core 1.1 Add、Attach、Update、Remove方法如何高效使用详解
前言 我比较喜欢安静,大概和我喜欢研究和琢磨技术原因相关吧,刚好到了元旦节,这几天可以好好学习下EF Core,同时在项目当中用到EF Core,借此机会给予比较深入的理解,这里我们只讲解和EF 6. ...
- Java 字符串格式化详解
Java 字符串格式化详解 版权声明:本文为博主原创文章,未经博主允许不得转载. 微博:厉圣杰 文中如有纰漏,欢迎大家留言指出. 在 Java 的 String 类中,可以使用 format() 方法 ...
- Android Notification 详解(一)——基本操作
Android Notification 详解(一)--基本操作 版权声明:本文为博主原创文章,未经博主允许不得转载. 微博:厉圣杰 源码:AndroidDemo/Notification 文中如有纰 ...
- Android Notification 详解——基本操作
Android Notification 详解 版权声明:本文为博主原创文章,未经博主允许不得转载. 前几天项目中有用到 Android 通知相关的内容,索性把 Android Notificatio ...
- Git初探--笔记整理和Git命令详解
几个重要的概念 首先先明确几个概念: WorkPlace : 工作区 Index: 暂存区 Repository: 本地仓库/版本库 Remote: 远程仓库 当在Remote(如Github)上面c ...
- Drawable实战解析:Android XML shape 标签使用详解(apk瘦身,减少内存好帮手)
Android XML shape 标签使用详解 一个android开发者肯定懂得使用 xml 定义一个 Drawable,比如定义一个 rect 或者 circle 作为一个 View 的背景. ...
随机推荐
- win10下 anaconda 环境下python2和python3版本转换
在cmd的环境下,输入以下命令安装Python2.7的环境 conda create -n python27 python=2.7 anaconda 上面的代码创建了一个名为python27的pyth ...
- 基于IPV6数据包的分析(GNS3)
一.实验拓扑 二.路由配置 1.路由R1的详细配置(以R1为例,R2与R3相同) R1(config)#interface fastEthernet 0/1 R1(config-if)#ipv6 ad ...
- webpack4升级指南
webpack4升级指南 鉴于图书项目编译速度极慢的情况(项目里面module太多了,编译慢很正常)且最近需求不多(很少出现的空挡期).所以我觉得搞一波webpack升级,看看有没有帮助.webpac ...
- Identity Server 4 - Hybrid Flow - Claims
前一篇 Identity Server 4 - Hybrid Flow - MVC客户端身份验证: https://www.cnblogs.com/cgzl/p/9253667.html Claims ...
- IdentityServer4 中文文档与实战
写在前面 写于2018.9.12 我研究 IdentityServer4 是从.net core 1.1的时候开始的,那时候国内的中文资料比较少,我都是按照官方文档来研究的,整理成了笔记.这个系列文档 ...
- Android 8.0系统的应用图标适配
版权声明:本文为HaiyuKing原创文章,转载请注明出处! 概述 参考资料<一起来学习Android 8.0系统的应用图标适配吧>中已经讲得很清楚了,这里我只是简单总结下.详情的内容请阅 ...
- springboot~WebTestClient的使用
在使用springboot进行开发时,单元测试是必要的,当你建立一个spring项目时,它会为我们自己生成一个测试项目,当你的项目开始过程中,测试用例是同时要进行的,我们在进行WEB层的集成测试时,可 ...
- 带你找到五一最省的旅游路线【dijkstra算法代码实现】
算法推导过程参见[dijkstra算法推导详解] 此文为[dijkstra算法代码实现] https://www.cnblogs.com/Halburt/p/10767389.html package ...
- Docker最全教程——MongoDB容器化(十二)
MongoDB容器化 MongoDB是一个免费的.开源的.跨平台分布式面向文档存储的数据库,由C++语言编写.旨在为WEB应用提供可扩展的高性能数据存储解决方案. MongoDB是一个介于关系数据库和 ...
- WPF Geometry 添加Path数据
当图片转svg,svg转Xaml后,根据数据加载显示图片 DrawingImage: <DrawingImage x:Key="Image.Search"> <D ...