2012-04-19 28 views
6

Điều tôi muốn làm là gán hình ảnh cho các phần tử ui trong thời gian chạy (nghĩ kiểu Winamp) nhưng tôi không biết cách đọc từ mã zip mà không lưu trữ vào đĩa. Hoặc làm thế nào để gán mỗi hình ảnh đến một yếu tố uiLàm cách nào để đọc tệp hình ảnh trực tiếp từ mã zip mà không cần giải nén vào đĩa?

Tôi đang làm việc trên một mac với cacao và khách quan c

+0

Chỉ cần ghi chú nhanh. Im sử dụng osx và mục tiêu c theo các thẻ. – Jamesp1989

+0

bản sao có thể có của [Mục tiêu C - Truy cập tệp trong zip mà không cần giải nén zip] (http://stackoverflow.com/questions/9498900/objective-c-accessing-files-in-zip-without-extracting-zip) –

Trả lời

5

Sử dụng objective-c zip (iOS/Mac zlib wrapper)

Sau đó, bạn có thể làm:

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

Điều này có làm việc trên mac hoặc là điều này cho Ios? – Jamesp1989

+0

sẽ hoạt động với iOS và Mac –

+0

Rất cám ơn. Điều này sẽ thêm nhiều vào bộ nhớ chương trình? Và nó sẽ có thể tạo ra một plist hoặc từ điển cho mỗi tập tin? – Jamesp1989

1

Các zipzap phiên bản:

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

Hoặc nếu bạn đang tìm kiếm cho một mục cụ thể:

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; 
    } 

quét cho các tập tin như thế này là khá nhiều tối ưu. Quá trình quét chỉ sử dụng thư mục trung tâm zip và không thực sự trích xuất dữ liệu cho đến -[entry newDataWithError:].

Các vấn đề liên quan