我想扩展应用程序下载zip文件的iPhone应用程序 子目录然后提取它,然后加载zip中的图像。
任何想法如何在运行时解压缩和访问图像?对于某些想法会非常高兴。
问候,
答案 0 :(得分:20)
我过去曾使用ZipArchive取得成功。
它非常轻巧,使用简单,支持密码保护,ZIP内的多个文件,以及压缩和放大解压缩。
基本用法是:
NSString *filepath = [[NSBundle mainBundle] pathForResource:@"ZipFileName" ofType:@"zip"];
ZipArchive *zipArchive = [[ZipArchive alloc] init];
[zipArchive UnzipOpenFile:filepath Password:@"xxxxxx"];
[zipArchive UnzipFileTo:{pathToDirectory} overWrite:YES];
[zipArchive UnzipCloseFile];
[zipArchive release];
答案 1 :(得分:9)
您无法提取到您的包中。使用[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0]
获取可写入目录的路径。
您可以使用http://code.google.com/p/ziparchive/中的代码从zip存档中提取文件。
答案 2 :(得分:3)
如果您将ZipArchive
添加到项目中,请记住还要添加框架。
正确的框架是libz.dylib
。 最新版本(Xcode 4.2)为1.2.5 。
(在目标的构建阶段选项卡中将库添加到包含库的部分。)
答案 3 :(得分:2)
我建议你使用ssziparchive bcoz它支持ARC
和Non ARC
项目。
SSZipArchive.h
,SSZipArchive.m
和minizip
添加到您的项目中。libz
(现在的libz1.2.5
)库的最新版本添加到目标。您无需对ARC
执行任何操作。 SSZipArchive
将检测您是否未使用ARC
并添加所需的内存管理代码。
代码将是这样的:
NSString *documentsDirectory = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];
// Unzipping
//If your zip is in document directory than use this code
NSString *zipPath = [documentsDirectory stringByAppendingPathComponent:@"mediadata.zip"];
//else if zip file is in bundle than use this code
NSString *zipPath = [[NSBundle mainBundle] pathForResource:@"mediadata" ofType:@"zip"];
NSString *destinationPath = [documentsDirectory stringByAppendingPathComponent:@"MediaData"];
if( [SSZipArchive unzipFileAtPath:zipPath toDestination:destinationPath] != NO ) {
//unzip data success
//do something
NSLog(@"Dilip Success");
}else{
NSLog(@"Dilip Error");
}