0

我有一个创建文件的 Perl 脚本,我想写入它们的资源分支,以指定它们应该打开的默认应用程序(我不能只使用Finder中的获取信息来更改它,它会一直恢复)。

我可以找到有关 Apple 的神秘资源分支的信息,但出于我的目的,我很乐意从使用正确应用程序打开的现有资源分支中读取数据,并将其硬编码到我的脚本中。问题是,我对 Perl 太陌生了,不知道如何从文件中读取十六进制数字,将其复制并粘贴到我的脚本中,并将它作为十六进制正确写入我的新.rsrc文件中。

我想做类似的事情:

my $theHex="DEADBEEF" #<---this is where I would paste the hex from the existing rsrc file
open (OUT, ">$filename/rsrc"); #<--this is the resource fork for file $filename
printf OUT "%x" $theHex #<----I'm not sure that this formatting is right

编辑:是的,我知道,资源叉已被弃用。请告诉 Apple,以便他们可以停止在其操作系统中使用它们来确定诸如打开特定文件的应用程序之类的事情。嘘!

4

2 回答 2

1

您在该代码中有几个问题。首先,您的格式字符串后需要一个逗号:

printf OUT "%x", $theHex

现在我们有了一些语法上有效的源代码,我们可以继续解决您的真正问题。的%x格式字符串printf期望给定一个整数,但您给它一个非数字字符串。当字符串值$theHex转换为整数时,您将得到零。解决这个问题很简单,您只需要正确初始化$theHex

my $theHex = 0xDEADBEEF;

“0x”前缀告诉 Perl 你正在将数字写为十六进制;类似地,零前缀(例如0666)表示八进制。

现在你有一个 0xDEADBEEF 整数的十六进制字符串表示。

如果您只想将四个字节从一个资源叉复制到另一个,那么您最好使用read读取四个原始字节,然后print将这些字节写入另一个资源叉。

你可能想看看pack你是否在到处乱扔bag'o'bytes。AFAIK,资源分叉需要四个字节,而不是一个四字节整数的八字节人类可读十六进制表示。

于 2011-07-04T03:45:50.410 回答
0

Mac OS X 仍然有资源分叉,但它们已被弃用多年。资源不能很好地与其他操作系统一起使用。这往往会使 Mac 无法与其他人很好地相处,从而将 Mac 自己孤立成小岛。

资源分支主要用于可执行文件,但 Mac OS X 应用程序实际上是一个文件夹(也称为捆绑包),其中包含其中的资源。

数据文件可能有资源分支,但大多数没有。如果是的话,主要是实现APPL/TYPE资源来说明文件类型是什么以及打开它的应用程序。现在,Mac OS X 使用文件后缀。它不像资源分叉那么简洁,但它与其他应用程序的兼容性要好得多。

但是,如果您真的想使用资源分叉和其他 Mac 杂项,请查看CPAN::Mac-Carbon。这会给你你所需要的。

笔记!!

这是 Mac- Carbon,这意味着这将与 Lion 告别。其中大部分来自 Mac OS X 之前 6/7/8/9 天的旧系统,并且出于兼容性目的保留了其中的一些 Mac OS X。

于 2011-07-04T04:08:31.510 回答