我已经开始使用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应用程序中列出解压缩文件的内容吗?
我使用this question启动了此项目,其中提到了此代码:SSZipArchive。效果很好。
答案 0 :(得分:0)
我已经测试了你的代码......并且对我来说工作正常... 主要变化: 代替:
ZipArchive *za = [[ZipArchive alloc] init];
if ([za UnzipOpenFile: zipPath]) {
BOOL ret = [za UnzipFileTo: cachePath overWrite: YES];
if (NO == ret){
}
[za UnzipCloseFile];
我正在使用
[SSZipArchive unzipFileAtPath:zipPath toDestination:cachePath];
您可以列出目录的内容(解压后):
NSArray * directoryContents = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:cachePath error:&error];
NSLog(@"DIR folder : %@",directoryContents);
您可以根据代码https://dl.dropboxusercontent.com/u/19438780/testSSZipArchive.zip
在此处查看我的演示项目更新
使用我的zip文件进行测试:
(
"__MACOSX",
"Archive.zip",
"error feedly.txt",
"image1.jpg",
"image2.jpg",
"image3.jpg",
"image4.jpg",
"Tony-M.testSSZipArchive"
)