FL08 - 巨大ボリューム情報の取得は PBXGetVolInfo で
(98 年 4 月 7 日)
Q: アプリケーションで、特定のボリュームについて、ディスクの総容量、空きスペースの総容量、ファイルの総数などを報告したいのですが、PBHGetVInfoを呼び出すと、2 ギガバイトより大きなボリュームでは正確な数字が出ません。正しい情報を得るには何を呼び出したらいいでしょうか。
A: PBXGetVolInfo です。PBXGetVolInfo は Mac OS がサポートする、すべてのボリュームサイズ(現在は 2 テラバイトまでのサイズのボリュームをサポート) で使用できます。
PBXGetVolInfo 関数は、もともとは Power Mac 9500 の Developer Notes で説明したものです。次のFTP サイトからダウンロードすることができます。
ftp://ftp.apple.com/devworld/Technical_Documentation/ Developer_Notes/Macintosh_CPUs_-_PPC_Desktop/PowerMac_9500.sit.hqx
PBXGetVolInfo は Mac OS 7.5.3 以降で追加されたものです。これより古いシステムでもアプリケーションを動作させたい場合は、gestaltFSAttrセレクタを使って Gestalt を呼び出してください。gestaltFSSupports4GBVols と gestaltFSSupports2TBVolsをチェックして、どちらかのビットが設定されていたら、PBXGetVolInfo を呼び出しても安全です。いずれのビットも設定されていなければ、ユーザは2 ギガより大きいディスクは持たないわけですから、PBGetVInfo を使ってください。
「Q&A FL07」には、PowerPC のコードから PBXGetVolInfo を呼び出すのに必要なグルーコードが掲載してあります。
PBXGetVolInfo の動作は PBGetVInfo とほとんど同じですが、PBXGetVolInfoは、HVolumeParam 構造体ではなく、XVolumeParam 構造体を使用します。2つの構造体の違いは、XVolumeParam 構造体に 2 つフィールドが追加されていることです。これらは、2ギガバイトより大きいボリュームについての情報を返すのに必要な情報を保持しています。2つの追加フィールドは次の通りです。
UnsignedWide ioVTotalBytes; /* ボリュームの総バイト数 */
UnsignedWide ioVFreeBytes; /* ボリュームの空きバイト数 */
注意: アロケーションブロックの個数が必要な場合は、自分で計算しなければなりません。それはioVNmAlBlks が XVolumeParam 構造体になっても unsigned shortのままだからです。HFS+ボリュームのアロケーションブロック数は 65535 個をはるかに超えることがあるので、その場合ioVNmAlBlks は不正な値になります。アロケーションブロックの正確な個数は、ioVTotalBytesと ioVAlBlkSiz を使って計算してください (ioVTotalBytes/ioVAlBlkSiz= アロケーションブロック数)。
-- Mark Cookson
devsupport@apple.com
[
Technical Q&A's : Operating System Services : Files : FL08 ]
|