如何在 OS X 64 位应用程序中读写资源分支

Tho*_*ann 4 macos file-forks

在编写归档实用程序时,我需要能够在 Mac OS X 文件系统上读取和写入资源分支。

曾经存在FSOpenFork相关函数,但当前的在线文档和 Xcode (v7.1) 中包含的文档甚至不再提及这些函数。

此外,诸如此类的功能GetEOF甚至不再适用于 64 位应用程序。

目前有哪些 API 可用于读写资源分支?如果可以的话,请提供打开、读取、写入、关闭和查询/设置 EOF 和当前读写偏移量的函数声明。

注意:虽然我添加了自己的答案,列出了替换 FS... 函数,但如果其他人可以添加更多方法,例如使用 CFURL API 或命名 fork 方法(使用特殊的文件名,但我一直忘记它是如何工作的)。

小智 5

您可以通过附加/..namedfork/rsrc. (这在<sys/paths.h>as中定义_PATH_RSRCFORKSPEC。)虽然丑陋,但它确实使 shell 活动能够访问资源分叉,即使存在不知道的资源分叉。例子:

ls -l myfile/..namedfork/rsrc
cp myfile/..namedfork/rsrc ...
Run Code Online (Sandbox Code Playgroud)

资源分支也可作为com.apple.ResourceFork扩展属性使用。XATTR_RESOURCEFORK_NAME(这在 中定义<sys/xattr.h>。)特别是,f/getxattr()并且f/setxattr()可以读写资源分支。该_PATH_RSRCFORKSPEChack 实际上是通过 XNU 内核的扩展属性来实现的。