如何直接从zip中读取图像文件而不解压缩到磁盘?

时间:2012-04-19 14:42:12

标签: objective-c macos cocoa

我想要做的是在运行时将图像分配给ui元素(想想Winamp风格),但我不知道如何在不存储到磁盘的情况下从zip中读取。或者如何将每个图像分配给ui元素

我正在使用cocoa和Objective c

开发mac

2 个答案:

答案 0 :(得分:5)

使用objective-c zip (iOS/Mac zlib wrapper)

然后你可以这样做:

ZipFile *unzipFile= [[ZipFile alloc] initWithFileName:@"test.zip" mode:ZipFileModeUnzip];
[unzipFile goToFirstFileInZip];

ZipReadStream *read= [unzipFile readCurrentFileInZip];
NSMutableData *data= [[NSMutableData alloc] initWithLength:256];
int bytesRead= [read readDataWithBuffer:data];

[read finishedReading];

答案 1 :(得分:1)

zipzap版本:

ZZArchive* archive = [ZZArchive archiveWithContentsOfURL:[NSURL fileURLWithPath:@"test.zip"]];
NSData* data = [archive.entries[0] newDataWithError:nil];

或者,如果您正在寻找特定条目:

ZZArchive* archive = [ZZArchive archiveWithContentsOfURL:[NSURL fileURLWithPath:@"test.zip"]];
NSData* data = nil;
for (ZZArchiveEntry* entry in archive.entries)
  if ([entry.fileName isEqualToString:@"test.txt"])
  {
    data = [entry newDataWithError:nil];
    break;
  }

扫描这样的文件非常理想。扫描仅使用zip中心目录,并且实际上不会在-[entry newDataWithError:]之前提取数据。