使用objective-zip库实现压缩文件内容的替换

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

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

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

objective-zip github地址:https://github.com/gianlucabertani/Objective-Zip

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

    // 获取沙盒中的路径获取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文件结构如下:

圈中部分为要修改的文件

posted @ 2016-07-07 16:21  Floatingdream  阅读(719)  评论(0编辑  收藏  举报