OS Xにマウントされたボリュームを列挙するには、それぞれ異なるAPIセットを使用する方法がいくつかあります。最高の(そして最も簡単な)レベルでは、nsfilemanager'sを使用できます mountedVolumeURLsIncludingResourceValuesForKeys:options:
. 。これが略語の例です。
NSArray *urls = [[NSFileManager defaultManager] mountedVolumeURLsIncludingResourceValuesForKeys:@[NSURLVolumeNameKey] options:0];
for (NSURL *url in urls) {
NSLog(@"Volume mounted at: %@", [url path]);
}
次のオプションでは、私たちをCの領域に戻します - そして、あなたはあなたの元のアプローチにとても親密でした。 OS X(およびBSD)には、 getmntent()
;代わりに、あります getmntinfo()
, 、驚くほど似ています。マウントボリュームを介してリストします getmntinfo()
, 、次のことを行うことができます。
struct statfs* mounts;
int num_mounts = getmntinfo(&mounts, MNT_WAIT);
if (num_mounts < 0) {
// do something with the error
}
for (int i = 0; i < num_mounts; i++) {
NSLog(@"Disk type '%s' mounted at: %s", mounts[i].f_fstypename, mounts[i].f_mntonname);
}
10.6のリリース以来、これらの両方のAPIを並べて使用しました。 getmntinfo()
常により完全です [NSFileManager mountedVolumeURLsIncludingResourceValuesForKeys:options:]
: :後者はフィルタリングします /dev
そして、あなたが知りたくないかもしれないし、そうでないかもしれない他のファイルシステム。ただし、システムに接続するディスクについては、一般的に信頼できます。
あなたが気づいたように、ディスカビットレーションのフレームワークの背後にある目的は異なります。 Diskarbitrationとは、ディスク資産の監視と管理に関するものです。 DAを使用すると、新しいディスクがマウントまたはマウントされていないときはいつでも呼び出すことができます。また、それらのディスクを変更、マウント、アンマップ、または排出すること、およびマウント/アンマウントプロセスに挿入し、同じことを行うためのリクエストを停止する可能性があります。しかし、あなたが指摘したように、それは既存のディスクをリストするためのインターフェイスを提供しません。取り付けられたボリュームのリストを取得したら、DAは次の優れた停留所になります(もちろん、そのリストを取得する理由に応じて!)。