ファイルロード・その1

ついでにファイルをロードしましょう。

// データフォーク名を取得
HFSUniStr255 forkName;
FSGetDataForkName(&forkName);

Macの過去の遺産として、一つのファイル内に「データフォーク」「リソースフォーク」という領域があります。リソースフォークにはアイコンデータなどのいわゆるメタデータが入っていますが、そういったデータを扱うアプリケーションを作るとき以外は使いません。これはデータフォークをロードするためのおまじないです。なお、Windowsのファイルにはデータフォークしかありませんし、最近のMacでもデータフォークしかないものが増えてきました。

// ファイルをオープンして参照番号をGet
SInt16 forkRefNum = 0;
FSOpenFork(&fsRef, forkName.length, forkName.unicode, fsRdPerm, &forkRefNum);
// ファイルサイズ取得
SInt64 forkSize;
FSGetForkSize(forkRefNum, &forkSize);
// メモリ確保&ロード
char* pBuffer = new char[forkSize];
FSReadFork(forkRefNum, fsAtMark, 0, forkSize, pBuffer, NULL);
// クローズ
FSCloseFork(forkRefNum);

あとは標準関数と似たようなものです。FILE*がforkRefNum, fopenがFSOpenFork, freadがFSReadFork, fcloseがFSCloseForkと言えます。構造としては同じですね。
他にもいろいろ方法はあると思いますが、今回示した方法は一応Appleの推奨する最新のものです。実行環境はある程度制限されますが、CarbonLib1.0からある関数なので問題ないでしょう。それに、なにしろ楽です(笑)。
Macのプログラミングは難しいと言われていますが、最近ではMacOS Xの進化に伴って楽になりました。ただウィンドウを表示するだけなら数行で済みます。インターネット上には古い情報があって混乱させられますが、できるだけ新しいものを探して楽しましょう。