博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
使用objective-zip库实现压缩文件内容的替换
阅读量:6226 次
发布时间:2019-06-21

本文共 1446 字,大约阅读时间需要 4 分钟。

    功能需求: 公司项目要实现电子书连载功能,比如一开始只有前2章,后面更新了3-5章的话,需要把后三章的内容添加到原来的文件中,相应的目录也要修改。(以下拿epub格式的电子书为例.PS:epub实际上就是压缩文件)

思路:可以把现在的epub和新增的epub解压出来、把新的epub里面同名的文件覆盖掉旧的、新增的复制过去,再打包成epub。

这样操作的话,效率不高也比较消耗内存。所以去网上找了下有没有效率不错的第三方。

objective-zip github地址:

这个库可以实现压缩文件,解压文件,替换压缩文件里面的内容功能,目前用到替换压缩文件内容功能。实现代码如下:

    // 获取沙盒中的路径获取document目录

    NSString *doc = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];

    NSLog(@"%@",doc);

    //获取epub文件路径

    NSString * path = [doc stringByAppendingPathComponent:@"template2.epub"];

    /*初始化OZZipFile 第一个参数为要添加内容的epub文件路径,第二个参数有三种类型

    压缩文件:OZZipFileModeUnzip

    清除原来内容之后再添加内容:OZZipFileModeCreate

    在原来文件内容的基础上添加内容OZZipFileModeAppend

     */

    OZZipFile * zipFile = [[OZZipFile alloc]initWithFileName:path mode:OZZipFileModeAppend];

    /**

     *  初始化OZZipWriteStream 第一个参数为要添加内容的文件路径(该路径表示压缩文件里面的路径) 第二个参数为压缩等级

     */

    OZZipWriteStream *stream = [zipFile writeFileInZipWithName:@"OEBPS/Text/Section0001.xhtml" compressionLevel:OZZipCompressionLevelBest];

    //初始化要添加的内容

    NSString * replacePath = [[NSBundle mainBundle]pathForResource:@"chapter0.xhtml" ofType:nil];

    NSData * data =  [NSData dataWithContentsOfFile:replacePath];

    NSError * error = nil;

    //往指定路径文件添加内容

    [stream writeData:data error:&error];

    if(error)

    {

        NSLog(@"%@",error);

    }

    //写入完成

    [stream finishedWriting];

    //关闭文件

    [zipFile close];

 注意事项:mainbundel里面的文件内容是允许修改的,所以测试的时候,不要把文件放入mainbundle路径下,应该放在沙盒路径下。

epub文件结构如下:

圈中部分为要修改的文件

转载于:https://www.cnblogs.com/P-E-A-K/p/5650566.html

你可能感兴趣的文章
笔试算法题(48):简介 - A*搜索算法(A Star Search Algorithm)
查看>>
机器学习-线性回归
查看>>
Editplus的设置
查看>>
wget使用技巧
查看>>
转:Bash脚本15分钟进阶指导
查看>>
excel表格如何限制单元格输入内容
查看>>
认识一下ES6的Reflect和Proxy
查看>>
升级cordova
查看>>
Alpha 冲刺 (10/10)
查看>>
简述mysql数据库配置文件
查看>>
count
查看>>
P3518 [POI2011]strongbox
查看>>
JS判断数组方法大全
查看>>
【20181019T3】比特战争【最小生成树思想】
查看>>
Python之初识模块
查看>>
iphone-common-codes-ccteam源代码 CCUICalloutView.m
查看>>
鐵打的營盤
查看>>
成功来自刻意练习
查看>>
LR11生成图表后修正Analysis中显示请求的地址长度过短50个字符的问题
查看>>
架构之美阅读笔记之二
查看>>