目标:下载压缩文件,解压缩并将其保存在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应用程序中使用的文件更简单的解压缩下载文件的方法?
答案 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)
你应该确保你的文件永远不会太大,因为你在解压缩开始之前将它完全加载到内存中。