在iOS中解压已下载的文件

27

使用ASIHTTPRequest,我下载了一个包含多个音频文件的文件夹的zip文件。我尝试使用基于minizip的SSZipArchiveZipArchive解压缩该文件。

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

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


你的错误意味着你正在使用只适用于 iPhone 的静态库与模拟器一起运行... - user529758
@H2CO3:我该如何解决它... - Huy Tran
你不能在模拟器上使用这个,只能在真实设备上使用。 - user529758
使用ZipArchive库的Zip/Unzip帖子很不错。 - Samidjo
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];

后面的SSZipArchive一行代码更容易,因为它还处理了写入提取文件。非常棒。 - Hlung
1
这是我评估过的大约3个顶级建议中最简单、最轻量级的解决方案。ZipArchive运行良好。 - jcpennypincher
1
请问您能否发布如何检查空的zip文件的代码? - byJeevan
我有一个问题,如何检查解压缩是否成功?这会返回任何值吗? - NovusMobile
@NovusMobile 这个回答太老了,我实在记不清了。建议你自己试试? - Srikar Appalaraju

2
首先,在iOS 7中,苹果公司引入了本地压缩/解压文件的功能。您还可以选择通过邮件、信息、Airdrop和“在...中打开”选项发送zip文件。关键是: zip文件必须受到iOS的支持。有些文件受支持,有些则不受支持。第一步:查找您的文件是否受支持。通过对新保存文件的简单检查来完成此操作。尝试打开它。如果它停留在“等待…”状态,则可能不受支持。如果是这种情况,请尝试使用其他库或使用解决方法。

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


-5
在iOS6上,ZIP文件似乎被处理成了一个文件夹。我通过以下简单的操作成功实现了:

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

你甚至可能有机会创建目录列表,以解压具有未知内容的文件。但不确定是否适用于受密码保护的ZIP文件。


对我也不起作用:NSUnderlyingError=0x8594310“操作无法完成。不是目录”。包括正确的zip库似乎也没有帮助。 - Rick77

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接