3

我知道资源叉在 Mac OS X 中已被弃用。

目前尚不清楚不太知名和很少使用的命名分叉是否也被弃用。HFS+ 实际上支持任何文件的任意数量的任意长度的分叉。(Mac 的命名分支在概念上类似于 Windows 的备用数据流或“ADS”。)

是否已弃用仍有理由学习创建、枚举、删除和以其他方式操作文件分叉。

然而,我似乎找不到任何关于使用分叉的 API 的信息。

我所能找到的只是从终端或者其他接受文件名或路径的地方,您可以使用语法访问资源分支,<filename>/..namedfork/rsrc直到最近还可以访问<filename>/rsrc. 我尝试用rsrc其他名称替换,但我在终端中尝试的所有命令都失败了。

我在哪里可以找到有关 API 的旧文档或非官方文档,以便以编程方式在 OS X 中使用命名分叉?

顺便说一句,当谷歌搜索这个话题时,互联网上似乎存在一个普遍的误解。随机下注者说命名叉是建立在命名文件属性上的。事实并非如此。命名文件属性是一个相当新的 OS X 功能。命名分叉早于 OS X。事实上,命名文件属性似乎很可能在幕后使用命名分叉。

无论如何,请不要提交有关命名文件属性的答案。我正在专门寻找有关任意命名分叉的信息。


在 12.7.4 节中有一些关于命名分叉的描述。“属性文件”

4

3 回答 3

4

旧的文件管理器能够做到这一点。不幸的是,这些文档似乎甚至不在 Apple 的Retired Documents Library中。

因此,您必须查看标题,这些标题有很好的文档记录。见/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h。在那里,您会发现,例如,FSOpenFork()它采用任意的分叉名称。但是请注意,记录它的注释说:“所有卷都应支持数据和资源分支。某些卷可能支持其他命名的分支。” (强调我的。)

一旦你有一个来自 的分叉参考号FSOpenFork(),你就可以使用FSReadFork()它来读取它,等等。

于 2016-06-11T12:53:26.707 回答
3

我的旧答案是错误的!三年后,现在互联网上有更多信息,包括旧的和已弃用的 Apple 开发人员文档的镜像。

以下是我发现的命名分叉的 API 选择:

打开文件

  • FSOpenFork打开文件或目录的任何分支以进行流式访问。
  • PBOpenForkSync打开文件或目录的任何分支以进行流式访问。
  • PBOpenForkAsync打开文件或目录的任何分支以进行流式访问。

创建和删除命名分叉

  • FSCreateFork为文件或目录创建命名 fork。
  • PBCreateForkSync为文件或目录创建命名 fork。
  • PBCreateForkAsync为文件或目录创建命名 fork。
  • FSDeleteFork从文件或目录中删除命名的 fork。
  • PBDeleteForkSync从文件或目录中删除命名的 fork。
  • PBDeleteForkAsync删除文件或目录的命名分支

迭代命名分叉

  • FSIterateForks确定属于文件或目录的每个命名 fork 的名称和大小。
  • PBIterateForksSync确定属于文件或目录的每个命名 fork 的名称和大小。
  • PBIterateForksAsync确定属于文件或目录的每个命名 fork 的名称和大小

操作文件和分叉大小

  • FSGetForkSize返回一个开叉的大小。
  • PBGetForkSizeSync返回一个开叉的大小。
  • PBGetForkSizeAsync返回一个开叉的大小。
  • FSSetForkSize更改开叉的大小。
  • PBSetForkSizeSync更改开叉的大小。
  • PBSetForkSizeAsync更改开叉的大小。

核心服务框架参考

于 2019-11-01T06:37:19.860 回答
2

在花了好几个小时之后,我相信我可以安全地得出这个结论:

  • HFS+ 确实支持任意命名的文件分叉。
  • 然而,Mac API 从未包含公共 API 以与除数据分叉和资源分叉之外的任何其他分叉一起使用。

抱歉,我没有具体的链接来支持我的发现。我基本上是通过查看 apple.com 上的许多页面和许多其他不同的页面来构建图片。

但特别是大多数与分叉相关的 API 都是成对存在的,其中一个用于数据分叉,另一个用于资源分叉。当 API 使用或返回有关 fork 的数据时,它是通过一个数字字段完成的,该字段只能有两个合法值,而不是代表 fork 名称的任意字符串。

于 2016-06-11T10:59:08.987 回答