使用第三方框架ZipArchive进行压缩与解压,cocoapod:pod 'ZipArchive'
1.压缩
ZipArchive* zip = [[ZipArchive?alloc]?init];
????NSArray?*paths =?NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,?NSUserDomainMask,YES);
????NSString?*documentpath = ([paths?count] >?0) ? [paths?objectAtIndex:0] :?nil;
????NSString* l_zipfile = [documentpath?stringByAppendingString:@"/test.zip"] ;
????NSString* image1 = [documentpath?stringByAppendingString:@"/image1.jpg"] ;
????NSString* image2 = [documentpath?stringByAppendingString:@"/image2.jpg"] ;
????BOOL?ret = [zip?CreateZipFile2:l_zipfile];
????ret = [zip?addFileToZip:image1?newname:@"image1.jpg"];
????ret = [zip?addFileToZip:image2?newname:@"image2.jpg"];
????if( ![zip?CloseZipFile2] )
????{
????????l_zipfile =?@"";
????}
2.解压缩
ZipArchive* zip = [[ZipArchive?alloc]?init];
????NSArray?*paths =?NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,?NSUserDomainMask,YES);
????NSString?*documentpath = ([paths?count] >?0) ? [paths?objectAtIndex:0] :?nil;
????NSString* l_zipfile = [documentpath?stringByAppendingString:@"/test.zip"] ;
????NSString* unzipto = [documentpath?stringByAppendingString:@"/test"] ;
????if( [zip?UnzipOpenFile:l_zipfile] )
????{
????????BOOL?ret = [zip?UnzipFileTo:unzipto?overWrite:YES];
????????if(?NO==ret )
????????{
????????}
????????[zip?UnzipCloseFile];
????}
乱码处理问题
里面是一些带特殊符号的文件, 使用zipArchive解压后会出现乱码。
解决方法是到ZipArchive.mm文件中找到
NSString * strPath = [NSString?
stringWithCString:filename];
换成UTF8方式解压, 如下:
NSString * strPath = [NSString?
stringWithUTF8String:filename];
但是有时后中文也会有问题, 用如下方式:
NSStringEncoding enc =
CFStringConvertEncodingToNSStringEncoding(kCFStringEncodingGB_18030_2000);
NSString * strPath = [NSString?
stringWithCString:filename encoding:enc];