在iPhone上解压缩下载文件的最简单方法?

时间:2010-03-24 05:16:26

标签: iphone gzip

目标:下载压缩文件,解压缩并将其保存在iPhone应用程序的Documents目录中。

以下代码使用在此处找到的Molecule应用程序中添加到NSData的initWithGzippedData方法: http://www.sunsetlakesoftware.com/molecules

适应我的应用:

NSString *sFolder = [NSHomeDirectory() stringByAppendingPathComponent:@"Documents"];
NSString *sFileName = [sFolder stringByAppendingPathComponent:@"MyFile.db"];
NSURL *oURL = [NSURL URLWithString: @"http://www.isystant.com/Files/MyFile.zip"];
NSData *oZipData = [NSData dataWithContentsOfURL: oURL];
NSData *oData = [[NSData alloc] initWithGzippedData:oZipData];
[oZipData release];
b = [oData writeToFile:sFileName atomically:NO];
NSLog(@"Unzip %i", b);

结果:已成功下载zip文件。从它开始,在Documents目录中创建一个新的,应该解压缩的文件,其中包含所需的名称(MyFile.db),但它没有字节。

有人看到问题吗?或者,是否有一种比Molecules应用程序中使用的文件更简单的解压缩下载文件的方法?

2 个答案:

答案 0 :(得分:1)

我认为你的问题可能是你试图gzip-deflate一个Zip文件。这是两种不同的压缩算法。

我基于CocoaDev wiki的贡献者提供的this NSData category(我已复制到this answer的代码)中的Molecules中的gzip-deflating代码。您要做的是使用他们的-zlibDeflate实现,这应该正确解压缩Zip文件。

与您的问题无关,而不是使用NSHomeDirectory()并附加路径组件,建议的查找文档目录的方法如下:

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];

答案 1 :(得分:0)

你应该确保你的文件永远不会太大,因为你在解压缩开始之前将它完全加载到内存中。