27

使用 ASIHTTPRequest,我下载了一个 zip 文件,其中包含一个包含多个音频文件的文件夹。我尝试使用SSZipArchive和解压缩文件ZipArchive,它们都基于minizip.

当我编译代码时,我得到这个错误:Undefined symbols for architecture i386: "_OBJC_CLASS_$_ZipArchive", referenced from: objc-class-ref in AppDelegate.o.

如何在 iOS 中解压缩此文件?

4

3 回答 3

51

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

更多关于这个包的例子在这里

我也在一些项目中尝试过SSZipArchive 。下面的行将解压缩您的 zip 文件。

[SSZipArchive unzipFileAtPath:path toDestination:destination];
于 2012-07-04T17:36:53.707 回答
2

首先,在 iOS 7 中,Apple 引入了本地压缩/解压缩文件的功能。您还可以选择通过邮件、消息、空投和“打开方式”发送 zip 文件。关键是:zip 文件必须支持 iOS有些支持,有些不支持。第一步:确定您的文件是否受支持。通过简单检查您新保存的文件来做到这一点。尝试打开它。如果它卡在“Waiting...”中,它可能不受支持。如果是这种情况,请尝试其他库或使用解决方法。

现在,以编程方式执行此操作目前需要使用第三方库来保存 zip 文件并解压缩它们。这并不理想,因为很多人/公司都避免使用它们。话虽如此,答案标记为正确,ZipArchive 是一个很棒的第三方工具,特别是因为它现在支持 Swift。我建议在 Apple 引入本地库之前使用它。

于 2015-07-08T18:13:52.873 回答
-5

在 iOS6 上,ZIP 文件似乎像文件夹一样处理。我通过简单地执行以下操作取得了成功:

[[NSFileManager defaultManager] copyItemAtPath:[NSURL URLForCachesDirectoryWithAppendedPath:@"ZIP_FILE.zip/Contents/Test.m4a"].path
                                        toPath:[NSURL URLForCachesDirectoryWithAppendedPath:@"Test.m4a"].path
                                         error:nil];

您甚至可以创建一个目录列表来解压缩具有未知内容的文件。虽然不知道受密码保护的 ZIP 文件。

于 2013-08-16T19:14:01.200 回答