我开始使用 ZipArchive 是因为我有一个测试应用程序,它显示来自内容经常更改的服务器的图像。我希望应用程序对图像进行排序和显示,而无需明确列出新图像名称。(或者也许我还应该在压缩文件中包含一个包含新图像名称的 XML 文档。)无论哪种方式,我现在都遇到了一个问题,将已知图像添加到服务器上的 zip 文件并在应用程序。
原始的 zipfile.zip 文件有 2 个文件:photo.png 和 text.txt
这样可行。所以我下载了 zipfile.zip 并将其上传到我的服务器。当然,它仍然有效。然后我解压缩它,添加一个新图像,然后在我的服务器上重新压缩它。
更新后的 zipfile.zip 现在有 3 个文件:photo.png、myphoto.png 和 text.txt
找不到我添加的图片 myphoto.png。我错过了什么?
- (void) viewDidAppear:(BOOL)animated {
[super viewDidAppear:animated];
dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
dispatch_async(queue, ^{
NSURL *url = [NSURL URLWithString:@"http://www.icodeblog.com/wp-content/uploads/2012/08/zipfile.zip"];
NSError *error = nil;
NSData *data = [NSData dataWithContentsOfURL:url options:0 error:&error];
if(!error) {
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES);
NSString *cachePath = [paths objectAtIndex:0];
NSString *zipPath = [cachePath stringByAppendingPathComponent:@"zipfile.zip"];
[data writeToFile:zipPath options:0 error:&error];
if(!error) {
ZipArchive *za = [[ZipArchive alloc] init];
if ([za UnzipOpenFile: zipPath]) {
BOOL ret = [za UnzipFileTo: cachePath overWrite: YES];
if (NO == ret){
}
[za UnzipCloseFile];
// NSString *imageFilePath=[cachePath stringByAppendingPathComponent:@"photo.png"];
NSString *imageFilePath=[cachePath stringByAppendingPathComponent:@"myphoto.png"];
NSData *imageData = [NSData dataWithContentsOfFile:imageFilePath options:0 error:nil];
if (imageData) {
NSLog(@"found data");
} else {
NSLog(@"no data");
}
UIImage *img = [UIImage imageWithData:imageData];
NSString *textFilePath = [cachePath stringByAppendingPathComponent:@"text.txt"];
NSString *textString = [NSString stringWithContentsOfFile:textFilePath encoding:NSASCIIStringEncoding error:nil];
dispatch_async(dispatch_get_main_queue(), ^{
self.imageView.image = img;
self.label.text = textString;
});
}
} else {
NSLog(@"Error saving file %@",error);
}
} else {
NSLog(@"Error downloading zip file: %@", error);
}
});
}
当我运行它时,寻找我添加的图像,它返回“无数据”。为什么?更大的问题是:我可以在我的 iOS 应用程序中列出解压缩文件的内容吗?
我从这个问题开始这个项目,其中提到了这段代码:SSZipArchive。它运作良好。