【问题标题】:Creating a file bundle on OSX在 OSX 上创建文件包
【发布时间】:2011-05-29 17:42:07
【问题描述】:

对于一个应用程序,我想将一组文件存储在一起,并将它们作为单个文件显示在文件系统中,以便于管理。我目前将所有内容存储在一个文件夹中。

我想保持可访问性,以便您可以在必要时手动编辑内部内容。

执行此操作的一种方法是创建一个 zip 存档并为其指定一个自定义扩展名,而不是 .zip。然后它会显示为文件类型,如果需要,您可以解压缩并访问内容,但在正常使用时将其隐藏。

我似乎找不到方便的方法来执行此操作。 Boost 和 zlib 可以进行压缩,但不适用于存档。我找到了 libzip,但我很难理解如何使用它,在我看来,它似乎只读取/写入 zip 档案而不进行实际压缩。

有没有更方便的方法来解决这个问题?

你能调用系统函数在 OSX 上从 c++/Carbon 创建存档吗?

还有其他方法可以让文件夹显示为单个文件吗?

【问题讨论】:

  • 您想从命令行还是从您正在编写的某些代码中创建 .zip 存档?
  • 来自代码 (C/C++)。请注意,我并不真正关心压缩。我只是希望文件成为捆绑包并同时保持可访问性。

标签: macos zip bundle macos-carbon file-extension


【解决方案1】:

在 OSX 中,您可以创建 Document Packages(类似于应用程序包),它们在 Finder 中被视为单个文件,但实际上只是具有一些内部结构的目录。

Apple 不会压缩这些包,但它们确实提供了您描述的功能,并且可以使用 CFBundleRef 通过 CoreFoundation 创建和访问它们。

来自文档:

... 关于创建文档包要记住的重要一点是它只是一个目录。只要注册了文档包的类型(如“Registering Your Document Type” 中所述),您所要做的就是创建一个具有适当文件扩展名的目录。 (Finder 使用文件扩展名作为将目录视为包的提示。)您可以使用标准 BSD 文件系统例程创建目录(并创建要放入该目录中的任何文件)...

【讨论】:

  • 谢谢。这似乎是要走的路。我的第一个目标平台是 Mac,但我更喜欢跨平台的解决方案。有什么想法吗?
  • 我没有在任何其他平台上的经验,所以我不会在那里提供太多帮助。如果跨平台是目标,也许 .zip 存档是更好的选择。要么,要么编写自己的二进制文件格式。
  • 不错。我不知道。
  • @0x80:这里有一些 .zip 答案:stackoverflow.com/questions/1928162/…
  • 毕竟我得到了 libzip 的工作。我的代码有一个愚蠢的错误。与此同时,我调查了其他 zip 库,但似乎没有一个是更好的选择。我仍然非常喜欢捆绑方法,但我知道我迟早需要将它移植到 Windows。知道捆绑包在 Windows 中是如何保存的吗?我猜它们只是在那里以文件夹的形式出现,或者微软领域是否有类似的举措可以兼容?
【解决方案2】:

第一步,简单地重命名文件夹并添加扩展名.bundle,例如Myappdir.bundle

这会将整个文件夹显示为一个带有类似乐高的捆绑图标的文件。

下一步是你必须在里面创建一个 Info.plist 文件。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-08-10
    • 2016-07-13
    • 1970-01-01
    • 2021-03-11
    • 2012-02-09
    • 2016-01-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多