android解压zap空间耗费,iOS zip zap读取压缩文件

在不解压zip文件的情况下肚去其中的文件,因为之前使用的ziparchive不能满足现在的需求

在终端输入:pod search zip zap,可以搜到当前的最新版本的(适应xcode的最新版本,若xcode不是最新的可以降低版本),然后添加进Podfile,再运行一下pod update --no-repo-update就可以添加到自己的工程当中了

在需要的地方添加#import就可以了。

用法

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__);

}else{

return [UIImage imageWithData:data];

}

}

}

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] - 1 - [[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;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值