2012-07-04 55 views
27

我想下载一个zip文件,其中包含一个文件夹,其中包含许多文件音频,用于在我的发音词典中使用。我使用ASIHTTPRequest来下载它,而我的问题是“我不知道如何解压该文件”。我试图使用SSZipArchiveZipArchive他们都是基于minizip,但当我编译代码Undefined symbols for architecture i386: "_OBJC_CLASS_$_ZipArchive", referenced from: objc-class-ref in AppDelegate.o时出现错误。所以你可以给我一些建议在iOS中下载并解压缩文件

+0

你的错误意味着你正在使用一个iPhone模拟器的静态库... – 2012-07-04 17:44:22

+0

@ H2CO3:我该如何解决它... –

+0

你不能在仿真器上使用它,只能在真实的设备上使用。 – 2012-07-05 09:12:09

回答

49

我已经使用ZipArchive在过去的成功。它非常轻量级,使用简单,支持密码保护,ZIP内的多个文件,以及压缩解压缩。

的基本用法是:这个包here

我也曾在一些项目尝试SSZipArchive

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]; 

更多的例子。 下面的行将解压缩您的zip文件。

[SSZipArchive unzipFileAtPath:path toDestination:destination]; 
+0

后者的SSZipArchive单行版更容易imo,因为它也处理写作提取的文件。很简约。 – Hlung

+0

优秀的答案! – Vivo

+1

这是我从大约3个最重要的建议中评估的最简单,最轻量级的解决方案。 ZipArchive运作良好 – jcpennypincher

-5

在iOS6上,ZIP文件似乎像文件夹一样处理。我不得不简单地做以下成功:

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

有可能是一个机会,你甚至可以使一个目录列表与未知的内容解压文件。虽然不知道密码保护的ZIP文件。

+1

没有为我工作:/ – Cfr

+0

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

2

首先,在iOS 7中,Apple引入了本地压缩/解压缩文件的功能。您也可以选择通过Mail,Messages,Airdrop和“Open in”发送zip文件。关键是:该zip文件必须得到iOS的支持。有些是,有些则不是。第一步:查明您的文件是否受支持。通过对新保存的文件的简单检查来完成此操作。尝试打开它。如果卡住“正在等待......”,则可能是,可能不支持。如果是这种情况,请尝试使用其他库或使用解决方法。

现在,以编程方式执行此操作目前需要使用第三方库来保存zip文件并将其解压缩。这并不理想,因为很多人/公司都避免使用它们。话虽如此,答案标记正确,ZipArchive是一个伟大的第三方工具,尤其是因为它现在支持Swift。我会推荐使用它,直到Apple推出一个本地库。