0

ファイルを作成する Perl スクリプトがあり、ファイルを開くときに使用するデフォルトのアプリケーションを指定するために、リソース フォークに書き込みたいと考えています ( Finderでget information を使用して変更することはできず、元に戻り続けます)。

Apple の難解なリソース フォークについて知ることができましたが、私の目的のために、適切なアプリケーションで開く既存のリソース フォークからデータを読み取り、それをスクリプトにハードコードすることに満足しています。問題は、私は Perl に慣れていないため、ファイルから 16 進数を読み取り、それをコピーしてスクリプトに貼り付け、新しい.rsrcファイルに 16 進数として正しく書き込む方法を知らないことです。

私は次のようなことをしたい:

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 に伝えて、OS でそれらを使用して特定のファイルを開くアプリケーションなどを判断するのをやめるようにしてください。おい!

4

2 に答える 2

1

そのコードにはいくつかの問題があります。まず、フォーマット文字列の後にカンマが必要です:

printf OUT "%x", $theHex

構文的に有効なソース コードが得られたので、実際の問題に移ることができます。の%xフォーマット文字列printfは整数が与えられることを期待していますが、数値以外の文字列を与えています。の文字列値が$theHex整数に変換されると、ゼロになります。これの修正は簡単です。適切に初期化するだけです$theHex

my $theHex = 0xDEADBEEF;

"0x" プレフィックスは、数値を 16 進数で書き込んでいることを Perl に伝えます。同様に、ゼロ接頭辞 (例: 0666) は 8 進数を示します。

これで、0xDEADBEEF 整数の 16 進文字列表現が得られました。

あるリソース フォークから別のリソース フォークに 4 バイトをコピーするだけの場合は、 を使用readして生の 4 バイトを読み取り、 を使用printしてそれらのバイトを他のリソース フォークに書き込みます。

packバッグス・オ・バイトをぶら下げている場合は、見たいと思うかもしれません. 私の知る限り、リソース フォークは、4 バイト整数の人間が読める 8 バイトの 16 進数表現ではなく、4 バイトを必要とします。

于 2011-07-04T03:45:50.410 に答える
0

Mac OS X にはまだリソース フォークがありますが、何年も前から廃止されています。リソースは、他のオペレーティング システムではうまく機能しません。これにより、Mac は他の 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 に答える