我将sqlite数据库保存在.gz格式的S3服务器中。 当我的iOS应用程序启动时,我想在.gz文件中下载数据库并将其解压缩到文档目录中。
下载部分工作正常,但解压缩无效。
我尝试过ZipArchive,但它没有解压缩.gz文件。它能够解压缩ZIP文件。下面是代码,我试过了。
ZipArchive *za = [[ZipArchive alloc] init];
if ([za UnzipOpenFile:filePath]) {
BOOL ret = [za UnzipFileTo:destPath overWrite:YES];
[za UnzipCloseFile];
[za release];
if (ret == YES) {
[self stopSpinner];
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:[appDelegate encTitle] message:@"Update successful.\nPlease restart the application for changes to take effect." delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil];
[alert show];
[alert release];
} else {
//Didn't work
}
}
我在iOS中发现GZIP用于解压缩,但是没有任何想法可以使用它。如果有人有想法,请与我分享。 GZIP的链接:: https://github.com/nicklockwood/GZIP
如果有人知道.gz解压缩的任何其他库.....他们也欢迎。
答案 0 :(得分:2)
您在使用GZIP库时遇到什么困难?
您需要做的只是在gunzippedData
实例上调用NSData
,它将返回一个包含解压缩数据的新NSData
对象。
<强>更新强>
GZIP库不适用于文件,但它直接适用于NSData
的实例。这意味着您必须手动construct an NSData
object from your compressed .gz file,解压缩它,并write the uncompressed data到文档目录...
// assuming filePath is a valid local path to the .gz file
NSError *error = nil;
// Create an NSData instance from the file
NSData *compressedData = [NSData dataWithContentsOfFile:filePath options:0 error:&error];
if (!compressedData) {
NSLog(@"Reading file failed: %@", error);
}
else {
// Attempt to uncompress it
NSData *uncompressedData = [compressedData gunzippedData];
if (!uncompressedData) {
NSLog(@"Decompression failed");
}
else {
// Write the uncompressed data to disk
// You will need to set pathToSQLiteFile to the desired location of the SQLite database
[uncompressedData writeToFile:pathToSQLiteFile atomically:YES];
}
}
答案 1 :(得分:0)
我围绕着Apple自己的压缩库DataCompression维护了一个轻量级的 Swift 3 + 包装器库。除其他外,它还支持 GZIP 格式。
解压缩 .gz 文本文件并打印内容看起来像这样:
import DataCompression
let compressedData = try? Data(contentsOf: URL(fileURLWithPath: "/path/to/your/file.txt.gz"))
if let uncompressedData = compressedData?.gunzip() {
print(String(data: uncompressedData, encoding: .utf8) ?? "Can't decode UTF-8")
}
有关接口和其他压缩格式的完整概述,请参考README。