使用包含文件的第一级文件夹的NSTask创建zip存档

时间:2011-03-21 16:00:56

标签: cocoa zip nstask

我的方法适用于从先前创建和填充的临时目录中压缩文件:

NSURL *destURL = self.archiveDestURL;
NSTask *task = [[NSTask alloc] init];
[task setCurrentDirectoryPath:[srcURL path]]; 
[task setLaunchPath:@"/usr/bin/zip"];
NSArray *argsArray = [NSArray arrayWithObjects:@"-r", @"-q", [destURL path], @".", @"-i", @"*", nil];
[task setArguments:argsArray];
[task launch];
[task waitUntilExit];

但解压缩后我想拥有的是包含文件的文件夹。 确定我可以在tempDir中创建一个文件夹并在那里写我的文件,但是如果文件夹是创建的存档中的顶级文件,那么zip参数是什么?

我没有在man zip中看到这一点。

2 个答案:

答案 0 :(得分:3)

这会对你有帮助。

NSTask *unzip = [[NSTask alloc] init];
[unzip setLaunchPath:@"/usr/bin/unzip"];
[unzip setArguments:[NSArray arrayWithObjects:@"-u", @"-d", 
                     destination, zipFile, nil]];

NSPipe *aPipe = [[NSPipe alloc] init];
[unzip setStandardOutput:aPipe];

[unzip launch];
[unzip waitUntilExit];

答案 1 :(得分:0)

而不是使用NSTask,您可以将压缩功能合并到代码中。有几种选择。

    来自apple.com的
  1. ZipBrowser
  2. 将类别添加到NSData,如here
  3. 一个类似的问题。 How can I create a zip file by using Objective C?