年前做的邮件里面,需要解压邮件带的附件,但是当时只处理了zip的,rar的没找到合适的方式。昨天折腾了一天,算是折腾完了。现在整理如下:
- (void) unZipClick {
NSString *filename = unEncodingURL;
NSFileManager *fileManager = [NSFileManagerdefaultManager];
if ([fileManagerfileExistsAtPath:filename])
{
ZipArchive*zip = [[ZipArchive alloc] init];
BOOLresult;
if ([zip UnzipOpenFile:filename]) {
result = [zipUnzipFileTo:[filename stringByDeletingPathExtension]overWrite:YES];
if (!result) {
[zipping dismissWithClickedButtonIndex:0animated:YES];
}
else
{
NSMutableArray *arry = [[NSMutableArray alloc]initWithArray:[zip.zipPath pathComponents]];
if (![[[arry lastObject] pathExtension]isEqualToString:@""]) {
[arryremoveLastObject];
}
[arry removeObject:@"__MACOSX"];
NSMutableString * sendString = [[NSMutableString alloc] init];
BOOL isFirst = YES;
for (NSString *dd in arry) {
if(isFirst) {
[sendStringsetString:dd];
isFirst = NO;
}
else
{
[sendStringappendString:dd];
[sendStringappendString:@"/"] ;
}
}
filePath = [[NSMutableString alloc]initWithString:sendString];
[self showDirView];//此处是我利用filePath去获取刚才解压好的 文件目录下的所有文件
}
[zipUnzipCloseFile];
}
else
{
[zippingdismissWithClickedButtonIndex:0 animated:YES];
UIAlertView *zipping =[[UIAlertView alloc] initWithTitle:@"解压失败"message:@"文件损坏或者格式暂时无法解析"delegate:self cancelButtonTitle:@"知道了"otherButtonTitles: nil];
[zipping show];
}
}
}
zip相对比较简单,demo也不少,所以不做过多描述
2.RAR解压
之前已知没有好的办法,昨天去发现了Unrar4ios然后download下来看了看,地址https://github.com/ararog/Unrar4iOS
上面的那个zip下载下来后,网站里面有说明文档,zip包里有两个工程,一个是Unrar4iOS,一个是UnrarExample,前者是静态类库,需要自己编译,此处不多说了,后者就是网站给出的demo,不过其中还是存在点问题。
运行后会发现有错误
提示无法找到"RARExtractException.h"文件,此时你需要在unrar4iOS包中去找,然后将它添加到现有的这个demo中
此外unrar4ios.mm 也要倒入到工程中
此文件中是实现文件,rar解析的方法出自此处,如果步导入这个文件,你会发现,在你运行demo的时候,rar解析的几个方法不能按预期进行
-(BOOL) unrarOpenFile:(NSString*) rarFile;
-(BOOL) unrarOpenFile:(NSString*) rarFile withPassword:(NSString*)aPassword;
-(NSArray *) unrarListFiles;
-(BOOL) unrarFileTo:(NSString*) path overWrite:(BOOL)overwrite;
-(NSData *) extractStream:(NSString *)aFile;
-(BOOL)unrarCloseFile;
这几个方法就是rar解压时所用到的主要的几个方法,看方法名就应该知道时干嘛的了
ps:1.如果在解压rar时遇到了不能兼容armv7s的情况,参照上篇博客
2.由于时间关系,没有写的更详细点,特别是解压的时候,路径,文件涉及到的编码问题