5

我注意到 Apple 开始使用 zip 存档来替换 iWork 应用程序中的文档包(文件夹在 Finder 中显示为单个文件)。我正在考虑做同样的事情,因为在将文档包复制到 Windows 文件服务器时,我不断收到与我的文档包相关的支持电子邮件。

我的问题是在基于 NSDocument 的应用程序中执行此操作的最佳方法是什么?

我想最简单的方法是创建一个目录文件包装器,创建它的存档并在 NSDocument 中返回它

- (NSFileWrapper *)fileWrapperOfType:(NSString *)typeName error:(NSError **)outError

但我不明白如何创建 NSFileWrapper 的 zip 存档。

4

4 回答 4

5

如果您只想制作一个您的格式的 zip 文件(即,“mydoc.myextension”实际上是一个 zip 文件),没有方便的内置 Cocoa 机制来使用代码创建 zip 档案。看看这个谷歌代码项目:ziparchive我不相信文件包装器会在这种情况下有所帮助。

由于您引用了 iWork,我不拥有 iWork 09,但以前的版本使用包格式(即 NSFileWrapper 是理想的),但压缩描述文档结构的 XML,同时保留附件(如嵌入式媒体、图像等)。 ) 在资源文件夹中,全部在包中。我假设他们这样做是因为 XML 对于大型、复杂的文档可能非常大,但由于它是文本,所以压缩得非常好。这导致整体较小的文档。

如果苹果确实已经开始将整个文档制作成一个大的 zip 存档(我觉得这很奇怪),那么他们要么将必要的资源提取到某个临时文件夹中,要么将整个内容加载到内存中(从他们的包中退一步 -基于方法,IMO)。这些也是您需要考虑的因素。

于 2009-11-16T13:17:58.940 回答
1

您需要从文件包装器中获取数据并将其输入到ziparchive之类的东西中。

于 2009-11-16T18:49:03.813 回答
1

Pierre-Olivier Latour 为 NSData 编写了一个扩展来处理 zip 压缩。你可以在这里得到它: http ://code.google.com/p/polkit/

于 2009-11-16T21:15:27.167 回答
1

我知道这对聚会来说有点晚了,但我想我会提供另一个链接,可以帮助遇到这篇文章的任何人。

看起来 Apple 的 ZipBrowser 示例将是一个好的开始http://developer.apple.com/library/mac/#samplecode/ZipBrowser/Introduction/Intro.html

高温高压

于 2011-03-26T01:19:58.443 回答