2012-04-19 74 views
6

我想要做的就是在運行時將圖像分配給UI元素(想想Winamp樣式),但是我不知道如何從一個zip文件讀取而不存儲到磁盤。或者如何與每個圖像分配到UI元素如何直接從壓縮包中讀取圖像文件而不解壓縮到磁盤?

我工作在Mac上與可可和目標C

+0

只是一個快速的注意事項。我按照標籤使用osx和objective c。 – Jamesp1989 2012-04-19 15:18:32

+0

[Objective C - 在不解壓縮的情況下訪問zip文件]可能的重複(http://stackoverflow.com/questions/9498900/objective-c-accessing-files-in-zip-without-extracting-zip) – 2012-04-19 17:59:30

回答

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]; 
+0

請問這個在Mac上工作還是這是爲IOS? – Jamesp1989 2012-04-19 18:21:58

+0

應該可以在iOS和Mac上使用 – 2012-04-19 19:26:22

+0

非常感謝。這會增加很多程序的內存佔用?每個文件都可以生成一個plist或字典嗎? – Jamesp1989 2012-04-19 19:37:47

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:]