一、首先介绍minizip 的使用方法

ziparchive是基于开源代码”MiniZip”的zip压缩与解压的Objective-C 的Class,使用起来非常的简单
方法:从http://code.google.com/p/ziparchive/ 上下载ZipArchive.zip,解压后将代码加入工程中,并且把zlib库添加到工程中
使用方法:
1. 压缩:ZipArchive可以压缩多个文件,只需要把文件一一addFileToZip即可.

[cpp]  view plain copy
  1. ZipArchive* zip = [[ZipArchive alloc] init];
  2. NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
  3. NSString *documentpath = ([paths count] > 0) ? [paths objectAtIndex:0] : nil;
  4. NSString* l_zipfile = [documentpath stringByAppendingString:@"/test.zip"] ;
  5. NSString* image1 = [documentpath stringByAppendingString:@"/image1.jpg"] ;
  6. NSString* image2 = [documentpath stringByAppendingString:@"/image2.jpg"] ;
  7. BOOL ret = [zip CreateZipFile2:l_zipfile];
  8. ret = [zip addFileToZip:image1 newname:@"image1.jpg"];
  9. ret = [zip addFileToZip:image2 newname:@"image2.jpg"];
  10. if( ![zip CloseZipFile2] )
  11. {
  12. l_zipfile = @"";
  13. }
  14. [zip release];

2. 解压缩:

[cpp]  view plain copy
  1. ZipArchive* zip = [[ZipArchive alloc] init];
  2. NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
  3. NSString *documentpath = ([paths count] > 0) ? [paths objectAtIndex:0] : nil;
  4. NSString* l_zipfile = [documentpath stringByAppendingString:@"/test.zip"] ;
  5. NSString* unzipto = [documentpath stringByAppendingString:@"/test"] ;
  6. if( [zip UnzipOpenFile:l_zipfile] )
  7. {
  8. BOOLret = [zip UnzipFileTo:unzipto overWrite:YES];
  9. if( NO==ret )
  10. {
  11. }
  12. [zip UnzipCloseFile];
  13. }
  14. [zip release];

以上摘自:http://www.cnblogs.com/a7345678/archive/2012/06/27/2566125.html 暗夜精灵-鬼才阁。

二、压缩包含中文的文件时,到windows下解压后出现乱码。

这个问题原因是Ios版本的ZipArchive工程中,编码格式变为UTF-8.然后windows上的编码格式多数是GBK。

那么打开ZipArchive的源码,改变编码方式就行了。

找到函数:

-(BOOL) addFileToZip:(NSString*) file newname:(NSString*) newname

{

if( [_passwordlength] ==0 )

{

ret = zipOpenNewFileInZip(_zipFile,

(constchar*) [newnameUTF8String],//UTF-8方式编码

&zipInfo,

NULL,0,

NULL,0,

NULL,//comment

Z_DEFLATED,

Z_DEFAULT_COMPRESSION );

}

}

将上述代码中划线部分,替换为下面部分即可。

(constchar*) [newnamecStringUsingEncoding:CFStringConvertEncodingToNSStringEncoding(kCFStringEncodingGB_18030_2000)],

已经在mac和windows两端测试通过,都可以正常压缩带有中文的文件,并能正常解压。

三、解压带有中文或者日文的压缩文件问题

以下转载自:网友:xin88yue   http://www.cocoachina.com/bbs/simple/?t10195.html

原因是:ZipArchive类的解压函数 -(BOOL) UnzipFileTo:(NSString*) path overWrite:(BOOL) overwrite
在遍历压缩文件包,获取包文件的名字处理上存在Bug.

1.  下面两行代码获取包中当前文件的文件名
    unzGetCurrentFileInfo(_unzFile, &fileInfo, filename, fileInfo.size_filename + 1, NULL, 0, NULL, 0);
    filename[fileInfo.size_filename] = '\0';  //未尾追加0 结束

此时获取的文件名是正确的.

2.     但是由char*获取得到NSString*的转换方法使用出错,Mac默认是按UTF8编码的

//NSString * strPath = [NSString  stringWithCString:filename];       //此处得到的 strPath为空,导致函数返回YES,但目录下无文件

NSStringEncoding enc = CFStringConvertEncodingToNSStringEncoding(kCFStringEncodingGB_18030_2000);
        NSString * strPath = [NSString  stringWithCString:filename encoding:enc];//正确!这个地方应该是跟压缩时的编码对应上才对。

这样就OK了!

转载于:https://www.cnblogs.com/mgbert/p/3993248.html

ZipArchive(解压文件)相关推荐

  1. ZipArchive压缩文件,文件夹以及解压文件和文件夹

    需要导入ZipArchive三方框架,并导入框架下的#import "Main.h"头文件, 注意:导入ZipArchive三方框架编译会报错,还需要手动导入动态库:libz.dy ...

  2. 通过C#代码 压缩/解压文件

    通过引用一DLL(ICSharpCode.dll)可以实现所述功能... 一.压缩文件 using System; using ICSharpCode.SharpZipLib; using ICSha ...

  3. 压缩,解压文件|*.tar.gz/.tar.bz2 文件

    参考 Tar选项: c – 创建压缩文件 x – 解压文件 v – 显示进度 f – 文件名 t – 查看压缩文件内容 j – 通过bzip2归档 z –通过gzip归档 r – 在压缩文件中追加文件 ...

  4. 测试掌握的Linux解压,轻松掌握Linux压缩/解压文件的方法

    对于在Linux下解压大型的*.zip文件,相信大家一般都会通过使用winrar直接在smb中来进行解压的操作,虽然说最终可能能够解压但有时候会存在解压时间长或者网络原因出错等故障的情况出现.那么有没 ...

  5. 解压文件出错解决方法(invalid compressed data--format violated)

    解压文件出错解决方法(invalid compressed data--format violated) 参考文章: (1)解压文件出错解决方法(invalid compressed data--fo ...

  6. tar 打包文件与解压文件

    tar 命令打包文件与解压文件 打包文件 1.把/root目录下的test1整个打包为test1.tar文件,如下所示 [root@localhost ~]# pwd /root [root@loca ...

  7. php文件手机怎么解压,linux 怎么解压文件

    linux怎么解压文件 Linux提供了一个很简单的功能,用来解压*.zip 文件. 解压命令:unzip filename.zip Linux系统中还有一类后缀为*.tar的文件. 解压命令为: t ...

  8. python打包zip文件_python 解压文件,合并文件 打包成zip格式文件 生成MD5值

    #!/usr/bin/env python #_*_encoding:utf-8 # 2018/05/29 #augustyang #2.0 ''' 解压文件,合并文件 打包成zip格式文件 生成MD ...

  9. java zip malformed_关于Java解压文件的一些坑及经验分享(MALFORMED异常)

    关于Java解压文件的一些坑及经验分享 就在本周, 测试人员找到我说现上的需求文档(zip格式的)无法预览了, 让我帮忙看看怎么回事. 这个功能也并不是我做的, 于是我便先看看线上日志有没有什么错误, ...

最新文章

  1. 购买腾讯云主机后的快速配置
  2. linux s t i a权限,关于Linux下s、t、i、a权限
  3. ubuntu源列表(清华,阿里,官方,选一即可)
  4. Static静态---笔记A
  5. “非IE内核浏览器”第一阶段开发计划发布
  6. 使用next.js完成从开发到部署
  7. python键_Python键盘按键模拟
  8. 斯坦福大学公开课:iOS8开发 第一课:课务,iOS8概述学习笔记
  9. Red5 支持https和rtmps
  10. 突变瀑布图及亚型突变瀑布
  11. python excel条件格式_关于python调用Excel“条件格式”——二探openpyxl
  12. php微信转发无法显示标题图片,解决微信公众号分享朋友圈不显示标题图片描述的方法...
  13. 机器学习入门的书单(数据挖掘、模式识别等一样)转
  14. swath data 是什么意思
  15. 中控考勤机使用 zkemkeeper SDK订阅考勤数据事件失效解决方式
  16. 【高等工程数学】南理工研究生课程 突击笔记2 谱半径,条件数
  17. 精益画布_敏捷项目管理-精益画布
  18. CDR怎么保存JPG格式
  19. git如何合并多个commits
  20. itv系统升级服务器地址,浙江itv升级服务器地址

热门文章

  1. Sentinel整合Dubbo限流实战
  2. 已解决:excel求平均值时出现div/0 如何处理
  3. cglib库Enhancer、Callback的使用
  4. SQL Server之查询检索操作
  5. UWB高精度定位最优方式:全无线方式部署UWB定位系统
  6. Linux目录与管理
  7. SQL查询实现,记录排序编号
  8. 5g服务器优势特点详解
  9. 记--Python --日常练习的两种思考方法
  10. 大数据开发的面试总结