使用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文件结构如下:

圈中部分为要修改的文件

时间: 2024-10-04 09:57:27

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

tika获取压缩文件内容

package com.wangchao.tika.sax; import org.xml.sax.Attributes;import org.xml.sax.SAXException;import org.xml.sax.helpers.DefaultHandler; public class MyHandler extends DefaultHandler {    @Override    public void characters(char[] ch, int start, int l

zend framework将zip格式的压缩文件导入并解压到指定文件

html代码 <pre class="php" name="code"><fieldset> <legend>批量导入学生照片</legend> <form enctype="multipart/form-data" action="/Import/importstuimg" method="post"> 导入照片压缩包文件:<input v

[ SHELL编程 ] 文件内容大小写替换

shell编程经常会碰到字符串.文件内容大小写的转换,在不同的场景下选择合适的命令可以提高编程效率. 适用场景 需大小写转换的文件内容或字符串 字符串大小写替换 小写替换大写 echo "hello world" | tr '[a-z]' '[A-Z]' echo "hello world" | tr '[:lower:]' '[:upper:]' 大写替换小写 echo "hello world" | tr '[A-Z]' '[a-z]' ec

zip、rar压缩文件密码破解——使用ARCHPR Professional Edition

直链下载地址: https://pan.abn.cc/weiyun/down.php?u=82441366e3c1f43fc69210e8ece93470.undefined.zip (压缩包内含解压密码)

python 文件内容修改替换操作

当我们读取文件中内容后,如果想要修改文件中的某一行或者某一个位置的内容,在python中是没有办法直接实现的,如果想要实现这样的操作只能先把文件所有的内容全部读取出来,然后进行匹配修改后写入到新的文件中. 实例代码如下所示: # 打开旧文件 f = open('file_text.txt','r',encoding='utf-8') # 打开新文件 f_new = open('file_text_bak.txt','w',encoding='utf-8') # 循环读取旧文件 for line

linux 常用命令 zcat 查看压缩文件中内容

zcat的用处是可以在不用解压压缩文件就可以查看文件内的内容 有时候log文件众多,为了减少存储空间就会将log文件压缩,这是zcat就可以查看压缩文件内容. -S:指定gzip格式的压缩包的后缀.当后缀不是标准压缩包(zip)后缀时使用此选项: -c:将文件内容写到标注输出: -d:执行解压缩操作: -l:显示压缩包中文件的列表: -L:显示软件许可信息: -q:禁用警告信息: -r:在目录上执行递归操作: -t:测试压缩文件的完整性: -V:显示指令的版本信息: -l:更快的压缩速度: -9

Java ZIP压缩文件使用总结

做Java Web开发,有时候遇到将多个文件或者文件夹压缩成一个.zip文件,供前端下载.Java的JDK中提供一个java.util.zip的接口,供大家使用.如下图: 图上就是Java 的JDK提供的接口,但是压缩文件或者文件夹的时候,怎么使用上面的接口呢?下面我给出几个相关的接口,这些接口是下面压缩文件或者文件夹过程中使用到的. java.util.zip.ZipEntry; java.util.zip.ZipOutputStream; 下面的压缩过程主要是通过这两个接口压缩文件或者文件夹

iOS中使用ZipArchive 压缩和解压缩文件

引自 http://www.36duo.com/thread-119-1-1.html 在本教程中,我将演示如何在iOS程序中压缩和解压缩文件.我们将使用一个叫做ZipArchive的第三方库来实现.尽管压缩和解压缩有许多其他的方案可选,但是我觉得ZipArchive库是最快捷.最简单的解决方案.let’s go. 为什么我需要解压缩文件 有许多原因能解释为什么我要在工程中使用压缩和解压缩功能,下面是几个常见的原因: 苹果App Store的50M下载限制 苹 果公司出于流量的考虑,规定在非WI

linux 压缩文件的命令总结

Linux压缩文件的读取 ·    *.Z       compress 程序压缩的档案: ·    *.bz2     bzip2 程序压缩的档案: ·    *.gz      gzip 程序压缩的档案: ·    *.tar     tar 程序打包的数据,并没有压缩过: ·    *.tar.gz  tar 程序打包的档案,其中并且经过 gzip 的压缩! ·    *.zip     zip 程序压缩文件 ·    *.rar     rar 程序压缩文件 Compress压缩文件 [