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

Posted

技术标签:

【中文标题】iPhone:在运行时在主包子目录中下载 zip 并解压缩【英文标题】:iPhone: Downloading zip and extracting in main bundle subdirectory at runtime 【发布时间】:2011-03-22 00:46:09 【问题描述】:

我想扩展我的 iPhone 应用程序,该应用程序下载一个 zip 文件到 一个子目录然后将其解压缩,然后加载 zip 中的图像。

任何想法如何在运行时解压缩和访问图像?会很高兴有一些想法。

您好,

【问题讨论】:

主包是只读的。您无法将文件提取到其中,但是您可以使用本地目录,例如文档目录。 【参考方案1】:

我过去曾成功使用过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];

【讨论】:

如何查看文件是否有密码保护,是否支持 这是基于obj C++的,我可以得到Obj C版本,这样我就不用使用OBJ C++编译器了吗? @Rog 我可以使用 ZipArchive for ios 6 我无法使用它构建我的应用程序,我正在添加 libz.1.2.5.dylib 但它没有运行,您正在导入哪些框架?【参考方案2】:

您无法提取到您的捆绑包中。使用[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0] 获取您可以写入的目录的路径。

您可以使用http://code.google.com/p/ziparchive/ 中的代码从 zip 存档中提取文件。

【讨论】:

我可以使用 Ziparchive for ios 6【参考方案3】:

如果您将ZipArchive 添加到您的项目中,请记住还要添加框架。 正确的框架是libz.dylib最新版本(Xcode 4.2)是 1.2.5

(将框架添加到目标的构建阶段选项卡中包含库的部分。)

【讨论】:

【参考方案4】:

我建议你使用ssziparchive,因为它同时支持ARCNon ARC 项目。

    SSZipArchive.hSSZipArchive.mminizip 添加到您的项目中。 将最新版本的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");
    

【讨论】:

很好的答案真的很有帮助,thanx +1 如果服务器中有“.zip”文件,如何使用 SSZipArchive 库。请告诉我们 @JoshKethepalli 在这种情况下,您必须先在本地下载 ZIP 文件然后解压缩,如果本地存储中没有原始 ZIP 文件,则无法解压缩。 当我提取文件时,它显示“.dat”格式。如何像普通文件夹一样提取文件 @JoshKethepalli 你能检查一下你的压缩包,下载后它没有损坏。

以上是关于iPhone:在运行时在主包子目录中下载 zip 并解压缩的主要内容,如果未能解决你的问题,请参考以下文章

PostgreSQL安装及使用教程二(zip解压方式)

通过在 iOS 中摇动手机在后台启动进程

UIAlertController 中的 UIPickerView 仅在 iPhone 中正确时在 iPad 中给出错误?

如何在每次推送提交时在 GitHub 工作流程中运行 commitlint

在主键列(表)中插入重复值时在 SQL Server 中返回哪个错误代码

连接到互联网时在主屏幕上显示进度轮 [Android]