iPhone:在运行时下载zip并在主bundle子目录中解压缩

时间:2011-03-22 00:46:10

标签: iphone ios ipad

我想扩展应用程序下载zip文件的iPhone应用程序 子目录然后提取它,然后加载zip中的图像。

任何想法如何在运行时解压缩和访问图像?对于某些想法会非常高兴。

问候,

4 个答案:

答案 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它支持ARCNon ARC项目。

  1. SSZipArchive.hSSZipArchive.mminizip添加到您的项目中。
  2. libz(现在的libz1.2.5)库的最新版本添加到目标。
  3. 您无需对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");
        }