用于从Cocoa应用程序浏览zip文件的库

时间:2011-09-11 13:57:57

标签: objective-c cocoa zip

我正在寻找标题所说的 - 一个Cocoa库,能够以ZIP格式列出文件,并根据请求提取单个文件。这些功能分别是'unzip -l'和'unzip $ archive $ filename'命令 - 我正在寻找一个框架/ API来实现这一点,比如Java的'java.util.zip'。

似乎逻辑后备是使用NSTask来调用命令行'unzip app',并且我愿意使用它。但是,我认为首先寻找非NSTask解决方案可能会更好。

3 个答案:

答案 0 :(得分:3)

http://code.google.com/p/objective-zip/

读取文件

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];
[zipFile close];

列出

内的文件
ZipFile *unzipFile= [[ZipFile alloc] initWithFileName:@"test.zip" mode:ZipFileModeUnzip];
NSArray *infos= [unzipFile listFileInZipInfos];
for (FileInZipInfo *info in infos) {
        NSLog(@"- %@ %@ %d (%d)", info.name, info.date, info.size, info.level);

        // Locate the file in the zip
        [unzipFile locateFileInZip:info.name];

        // Expand the file in memory
        ZipReadStream *read= [unzipFile readCurrentFileInZip];
        NSMutableData *data= [[NSMutableData alloc] initWithLength:256];
        int bytesRead= [read readDataWithBuffer:data];
        [read finishedReading];
}
[zipFile close];

关于目标结构的说明

请注意,在zip文件中没有文件夹层次结构的表示:它只是嵌入在文件名中(即:名为x/y/z/file.txt的文件)。由程序提取文件以将这些文件名视为表达结构并在文件系统上重建(在创建期间反之亦然)。常见的拉链/解压缩器只是遵循这条规则。

来自manual

答案 1 :(得分:0)

请参阅LOZIPFileWrapper

    LOZIPFileWrapper *zipFileWrapper = [[LOZIPFileWrapper alloc] initWithURL:URL password:nil error:NULL];
    NSArray *contentsOfZipArchive = [zipFileWrapper contentOfZIPFileIncludingFolders:YES error:NULL];
    NSData *content = [zipFileWrapper contentsAtPath:contentsOfZipArchive[0] error:NULL];

答案 2 :(得分:-1)

您可以使用Marek Sebera的想法,但您可以从列出zip文件内容开始:

理念一:
- 只需获取原始标题列表(使用上述想法)并拥有UITableView
- 选择标题后,从uitableview获取zip中的文件编号,然后取消归档

文件名示例:
lol.txt
路径/ hello.doc
路径/目录/洛尔/ file.txt的

理念二:
- 取消归档到某个地方(如图书馆目录)
- 用户完成后,重新压缩