1

可能重复:
如何在 iPhone 上解压缩 gzip 文件并将其写入未压缩文件

我试图在 iOS 中解压缩 .gz sqlite 文件,但直到现在我还没有找到一个好的库。

我试过SSZipArchive这样:

path = [[NSBundle bundleForClass:[self class]] pathForResource:@"test.sqlite" ofType:@"gz"];

NSString *documentsDir = (NSString *)[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
destination = documentsDir;
NSError *error;

BOOL success =  [SSZipArchive unzipFileAtPath:path toDestination:destination overwrite:YES password:nil error: &error];

这适用于压缩的 sqlite 数据库文件,但如果我 gzip sqlite 数据库则不行。然后每次返回错误“无法打开 zip 文件”。

然后我从https://github.com/nicklockwood/GZIP尝试了这种GZIP方法。我使用了这样的代码:

path = [[NSBundle bundleForClass:[self class]] pathForResource:@"test.sqlite" ofType:@"gz"];

NSString *documentsDir = (NSString *)[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
destination = [documentsDir stringByAppendingPathComponent:@"test.sqlite"];


NSData *gzData = [NSData dataWithContentsOfFile:path];
NSData *ungzippedData = [gzData gunzippedData];

return [ungzippedData writeToFile:destination atomically:YES]; 

之后,我在我的 Documents 文件夹中获得了一个名为 test.sqlite 的文件,但是如果我尝试打开它,它会失败,因为失败已损坏。

我最后一次尝试ZipArchive来自http://code.google.com/p/ziparchive/。我是这样使用它的:

ZipArchive* za = [[ZipArchive alloc] init];
if( [za UnzipOpenFile:path] ){
    BOOL success = [za UnzipFileTo:destination overWrite:YES];
    [za UnzipCloseFile];
    return success;
}

但这也无法打开文件。

有人能帮我吗?

4

1 回答 1

1

在 Xcode 的链接器设置中可以使用 zlib 库添加到您的目标。

在这里您可以找到有关如何使用 zlib 的示例。http://zlib.net/zlib_how.html

于 2012-10-24T11:34:48.393 回答