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

Posted

技术标签:

【中文标题】使用包含文件的第一级文件夹的 NSTask 创建 zip 存档【英文标题】:create zip archive using NSTask containing a first level folder with the files 【发布时间】:2011-03-21 16:00:56 【问题描述】:

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

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 中没有看到这个。

【问题讨论】:

【参考方案1】:

这会对你有所帮助。

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

【讨论】:

【参考方案2】:

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

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

【讨论】:

cesar,感谢您的建议。如果用户选择该选项,我的应用程序只需要制作一个 zip 存档,而不是阅读一个。很抱歉不清楚这一点,所以我认为不需要像您引​​用的链接(也使用NSTask)那样对NSData 进行分类,或者在ZipBrowser 的情况下,创建类文件来处理事情。我正在寻找留在内置库中的可能性,并认为有人可能知道正确的论点并交给它。 “解压缩”是指用户双击查找器中的 zip 存档时看到的内容。

以上是关于使用包含文件的第一级文件夹的 NSTask 创建 zip 存档的主要内容,如果未能解决你的问题,请参考以下文章

NSBundle 中的 NSTask

如何在主线程上安全地使用[NSTask waitUntilExit]?

Swift NStask 函数

使用 NSTask 执行离子构建命令 - 无法访问启动路径

Xcode 8 扩展执行 NSTask

对指定多个目录的第一级保留进行保留(再递归删除空目录)