ディスクの種類をCocoaから取得する
光学ドライブに入れたディスクがCD-RなのかCD-ROMなのかを調べる方法はありますか? もし、あればご存知の方教えて頂けないでしょうか?
http://mixi.jp/view_bbs.pl?id=485850
Core FoundationならIOKitを使ってガリガリやれそうですが、面倒なのでCocoaでできないか模索してみました。ADCで検索してみたらDiscRecording.frameworkのDRDeviceクラスにそれらしき定数が予約されていたので(http://developer.apple.com/documentation/Carbon/Reference/discrecording/CocoaDoc/DRDevice/index.html)、適当に書いてみたのですが、うちの環境ではデバイスの数が0となってしまいます(CD-ROMを入れてiPodを挿してもだめだった)。
これはiTunesを使ってみると分かりますが、「書き込み可能な」デバイスを操作するフレームワーク、ぽいです。うちのiBookはCD-Rすら書けないへっぽこパソコンなのでテストが全くできていないので、誰か試してみてください。
#import <Cocoa/Cocoa.h> #import <DiscRecording/DRDevice.h> int main(int argc, char *argv[]) { NSAutoreleasePool* pool = [[NSAutoreleasePool alloc] init]; NSArray* array = [DRDevice devices]; NSLog(@"Devices contains %d items.",[array count]); DRDevice* device; NSEnumerator *enumerator = [array objectEnumerator]; while (device = [enumerator nextObject]) { NSString* mediaType = [[[device status] objectForKey:DRDeviceMediaInfoKey] objectForKey:DRDeviceMediaTypeKey]; NSLog(@"%@'s type = %@",[device displayName],mediaType); } [pool release]; return 0; }
見れば分かると思いますが、順番にディスクの表示名と種類を出力するだけのソースです。コンパイルは上のソースを保存して、
gcc test.m -o test -framework Cocoa -framework DiscRecording
とやれば、testができているはずです。DiscRecordingフレームワークを使っているので、Mac OS X 10.2以降でないと動かないと思います。
大学のiMacはCD-RWを書けるはずだけど、今は春期休業中なのでテストできません。