iOS zipzap读取压缩文件
最近在公司遇到一项需求,在不解压zip文件的情况下读取其中的文件,因为之前使用的ziparchive不能满足现在的需求,所以在网上一阵狂搜,终于找到了zipzap,实话说还真的难找。
之前读取本地zip文件的内容时会把它解压出来,运行app之后会发现原来的zip文件被同名文件夹取代,使用zipzap之后便不会再有这种情况,另外自己还可以根据需要把读取的文件写入某个文件夹。
只需要在终端输入:pod search zipzap ,回车就可以找到它的当前版本,然后添加进Podfile,再运行一下pod update --no-repo-update就可以把它添加进自己的工程了。
在需要使用的地方添加 #import <ZipZap/ZipZap.h> 就可以使用了,是不是很方便?

下面介绍一下zipzap的四种使用场景:
1、从zip中读取已知内容[即你知道所需要文件的文件名]
//把zip数据包转换成ZZArchive对象
ZZArchive *archive = [ZZArchive archiveWithURL:[NSURL fileURLWithPath:zip] error:&error];
//zip中的数据都在archive 的 [NSArray]entries属性中,
//所以可以通过for循环,或者NSArray自带的方法遍历entries中的元素获取自己想要的结果
//通常情况下我们只知道所需资源的名字,这样就可以使用下面的代码来实现
for (ZZArchiveEntry * ectry in archive.entries) {
if ([ectry.fileName isEqualToString:name]) {
NSData * data = [ectry newDataWithError:&error];
if (error) {
// NSLog(@"--------data error:%@--------\n %s",error,__FUNCTION__);
6 }else{
7 return [UIImage imageWithData:data];
8 }
9 }
}
//上面的代码只是从一个zip包中取出对应的图片,如果zip中的文件有一定的目录结构,大家可以打印一下ectry.fileName看看是什么样子,看过之后就会明白了
2、向zip包中添加内容
ZZArchive* newArchive = [[ZZArchive alloc] initWithURL:[NSURL fileURLWithPath:@"/tmp/new.zip"] options: @{ZZOpenOptionsCreateIfMissingKey: @YES} error:nil];
[newArchive updateEntries:
@[
[ZZArchiveEntry archiveEntryWithDirectoryName:@"folder/"],
[ZZArchiveEntry archiveEntryWithFileName:@"folder/first.text"
compress:YES
dataBlock:^(NSError** error){
return [@"hello, world" dataUsingEncoding:NSUTF8StringEncoding];
}]
]
error:nil];
3、更新zip包中的内容
ZZArchive* archive = [ZZArchive archiveWithURL:[NSURL fileURLWithPath:@"/tmp/old.zip"] error:nil];
NSMutableArray* entries = [archive.entries mutableCopy];
[entries replaceObjectAtIndex:replacingIndex
withObject: [ZZArchiveEntry archiveEntryWithFileName:@"replacement.text"
compress:YES
dataBlock:^(NSError** error){
return [@"see you again, world" dataUsingEncoding
}]];
[archive updateEntries:entries error:nil];
4、解压zip包
//path : zip路径
//aimDirection : 解压到什么位置
//如果解压成功,则返回YES,否则返回NO
+ (BOOL)unzipFileAtPath:(NSString *)path toDestination:(NSString *)aimDirection{
NSError * error;
ZZArchive* archive = [ZZArchive archiveWithURL:[NSURL URLWithString:path] error:&error];
if (error) {
return NO;
}
NSFileManager * fileManager = [NSFileManager defaultManager];
for (ZZArchiveEntry* entry in archive.entries)
{
if (!entry.fileMode || !S_IFDIR)
{
// Some archives don't have a separate entry for each directory
// and just include the directory's name in the filename.
// Make sure that directory exists before writing a file into it.
NSArray * arr = [entry.fileName componentsSeparatedByString:@"/"];
NSInteger index = [entry.fileName length] - - [[arr lastObject] length];
NSString * aimPath = [entry.fileName substringToIndex:index];
NSError * err;
[fileManager createDirectoryAtPath:[NSString stringWithFormat:@"%@/%@",aimDirection,aimPath] withIntermediateDirectories:YES attributes:nil error:&err];
if (err) {
return NO;
}
NSData * data = [entry newDataWithError:nil];
[data writeToFile:[NSString stringWithFormat:@"%@/%@",aimDirection,entry.fileName] atomically:YES];
}
}
[fileManager removeItemAtPath:path error:nil];
return YES;
}
iOS zipzap读取压缩文件的更多相关文章
- Java学习笔记之I/O流(读取压缩文件以及压缩文件)
1.读取压缩文件:ZipInputStream 借助ZipFile类的getInputStream方法得到压缩文件的指定项的内容,然后传递给InputStreamReader类的构造方法,返回给Buf ...
- perl 利用管道读取压缩文件内容
perl的文件句柄不仅支持普通文件, 还支持管道,今天需要统计一个fastq文件中的序列数和碱基数,而NGS的fastq文件一般都是gzip压缩的,所以 需要读取压缩文件中的内容,代码如下: my ( ...
- C# 读取压缩文件方式及乱码处理
目前主流的压缩文件操作类,除了C#原生的.还有 1. ZIP-DotNetZip 网址:http://dotnetzip.codeplex.com/ 2 7Zip-SevenZipSharp 网址:h ...
- iOS开发读取plist文件、iphone中plist文件的
在Xcode中建立一个iOS项目后,会自己产生一个.plist文件,点击时会看见它显示的是类似于excel表格: 但是,如果打开方式选择Source Code,你会看见它其实是一个xml文件. 我们会 ...
- Java读取压缩文件信息
不解压压缩文件,获取其中包含的文件,通过文件名检查是否包含非法文件.(后续再根据文件头或内容吧) zip: import java.util.zip.ZipEntry;import java.util ...
- 自制 COCO api 直接读取类 COCO 的标注数据的压缩文件
第6章 COCO API 的使用 COCO 数据库是由微软发布的一个大型图像数据集,该数据集专为对象检测.分割.人体关键点检测.语义分割和字幕生成而设计.如果你要了解 COCO 数据库的一些细节,你可 ...
- C# 压缩文件与字节互转
public class ZipBin { public byte[] bytes; //C#读取压缩文件(将压缩文件转换为二进制 public void GetZipToByte(string in ...
- linux 压缩文件的命令总结
Linux压缩文件的读取 *.Z compress 程序压缩的档案: *.bz2 bzip2 程序压缩的档案: *.gz gzip 程序压缩的档案: *.tar ...
- C#利用SharpZipLib解压或压缩文件夹实例操作
最近要做一个项目涉及到C#中压缩与解压缩的问题的解决方法,大家分享. 这里主要解决文件夹包含文件夹的解压缩问题. )下载SharpZipLib.dll,在http://www.icsharpcode. ...
随机推荐
- Android增量更新
http://blog.csdn.net/tu_bingbing/article/details/8538592 (转)
- Mac Vim 如何设置高亮
首先进入如下目录 cd /usr/share/vim 然后打开vimrc sudo vim vimrc 在vimrc中的“set backspace=2”这行下插入如下代码: set ai " ...
- 【Java基础】继承中的代码块和构造方法的执行顺序探索
本文讲述有关一个类的静态代码块,构造代码块,构造方法的执行流程问题.首先来看一个例子 /** * Created by lili on 15/10/19. */ class Person{ stati ...
- Already tried 0 time(s); retry policy is RetryUpToMaximumCountWithFixedSleep解决方法
14/03/26 23:10:04 INFO ipc.Client: Retrying connect to server: 0.0.0.0/0.0.0.0:10020. Already tried ...
- ABAP SY标签一览 .
Description: SY-SUBRC:语句执行后的返回值,0表示成功SY-DATUM:当前服务器日期SY-UZEIT:当前服务器时间SY-ULINE:255长度的水平线SY-VLINE:垂直线S ...
- ip_conntrack缓存neighbour
在我的ip_conntrack版本中,它目前已经可以缓存路由,filter规则等,还可以平滑生效最新配置的NAT,它越来越像真正的SDN了,唯一有待完善的就是将5元组的tuple进化成N元组的tupl ...
- 淘宝HSF服务的原理以及简单的实现
淘宝HSF服务具体来说分三个应用:api接口,service服务,本地应用. 最基本的Api服务应该是十分干净的,不含方法,只有接口.它是要被打包(jar包的形式)到中央仓库去的. service服务 ...
- hud 1241 Oil Deposits
Oil Deposits Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Tot ...
- SNMP协议总结
说明:本文仅供学习交流,转载请标明出处,欢迎转载! SNMP(Simple Network Management Protocal),简单网络管理协议,其前身是SGMP协议(简单网关监控协议),该协议 ...
- android100 自定义内容提供者
#ContentProvider,就是来操作数据的,增删改查, * 四大组件之一 * 应用的数据库是不允许其他应用访问的 * 内容提供者的作用就是让别的应用访问到你的数据库 * 内容提供者的作用:把私 ...