iOS zip zap读取压缩文件

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

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


在需要的地方添加#import<ZipZap/ZipZap.h>就可以了。


用法

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;

 }

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容