高度な検索
Developer Connection
Member Login ログイン | ご入会 ADC連絡先

OPS 10 - WindowPtrからファイルシステムの情報を取得することは不可能

(14-May-96)

Q: コールバック関数の中でドキュメントのフルパス名を取得する必要があるのですが、それに関連していそうな情報は、そのドキュメントを表示しているウィンドウのWindowPtrだけなのです。ファイル名はわかっているのですが、ディレクトリIDやボリュームリファレンス番号がわからないのです。WindowRecordからdirIDvRefNumを取得する方法はないでしょうか?

A: 残念なことに、必要となるファイルシステムの情報をWindowRecordから取得する方法はありません。WindowRecordは、ヒューマンインタフェースを実現するための構造化された情報のみを含んでおり、その中にはファイル名(実際にはドキュメントのタイトル)も含まれることがあります。ウィンドウはドキュメントのデータをユーザに表示する手段を提供するものではありますが、WindowRecordはファイルシステムの情報がどこにあるかという情報は持っていません。あなたがすでに述べたように、フルパス名を取得するにはディレクトリIDとボリュームリファレンス番号が必要です。

vRefNumと上位ディレクトリのID(parent dirID)がわかれば、DTSサンプルコードのMoreFiles中のフルパス関連のルーチンのいずれかを使用することができるでしょう。

もしファイルのリファレンス番号がわかるのであれば、PBGetFCBInfo()をコールしてvRefNumdirIDを取得することが可能であり、さらにMoreFilesを使用することによりフルパス名を取得できます。PBGetFCBInfo()はオープンされているファイル(File Control Blockのキューにあるファイル)の情報を返します。PBGetFCBInfo()は、以下のように使うことができます。


pascal OSErr   GetFileLocation(short refNum,
                short *vRefNum,
                long *dirID,
                StringPtr fileName)
 {
        FCBPBRec pb;
        OSErr error;

        pb.ioNamePtr = fileName;
        pb.ioVRefNum = 0;
        pb.ioRefNum = refNum;
        pb.ioFCBIndx = 0;
        error = PBGetFCBInfoSync(&pb);
        *vRefNum = pb.ioFCBVRefNum;
        *dirID = pb.ioFCBParID;
        return (error);
 }

以下の資料もご参照ください。

* File Control Blockのより詳細な情報については、Inside Macintosh: Files2-81から2-83を参照。

* PBGetFCBInfoより詳細な情報については、Inside Macintosh: Files2-237から2-238を参照。

[ Technical Q&A's : Operating System Services : OS Utilities : OPS10 ]