ドライブをイジェクトせずにアンマウントすることを知っていますか。NSWorkspace
ドライブをアンマウントする方法がいくつかありますが、ドライブをイジェクトすることもできます。
何か案が ?
ドライブをイジェクトせずにアンマウントすることを知っていますか。NSWorkspace
ドライブをアンマウントする方法がいくつかありますが、ドライブをイジェクトすることもできます。
何か案が ?
私は次のようにそれを行っています、そしてそれはドライブをアンマウントしますが、それを排出しません。
(実際にはディスクを取り出したいのですが、アンマウントすることしかできません。:Pディスクを取り出す方法を教えてください。)
DASessionRef session = DASessionCreate(kCFAllocatorDefault);
CFURLRef path = CFURLCreateWithString(NULL, CFSTR("<path_to_your_volume_here>"), NULL);
DADiskRef disk = DADiskCreateFromVolumePath(kCFAllocatorDefault, session, path);
DADiskUnmount(disk, kDADiskUnmountOptionDefault, __unmountCallback, NULL);
これは私がまだ取り組んでいるコードであり、開発とテストが行われています。
「パス」を手動で作成しています。より良い方法を使用(および共有)して、一般的な方法でボリュームのパスを取得できます。おそらく、この答えには正しい方法でそれを行うためのヒントがあります。
開発が洗練されて完了したら更新します。
これを行うには、DiskArbitration フレームワークで DADiskUnmount を使用します。
ディスクを取り出すには、あなたが述べたようにディスクをアンマウントしてから、__unmountCallback で次のようにします。
DADiskRef disk2 = DADiskCopyWholeDisk(disk);
DADiskEject(disk2,
kDADiskEjectOptionDefault,
NULL,
NULL);
任意のオブジェクトをコンテキストとして DADiskUnmount() に渡し、たとえば、__unmountCallback でそれぞれのディスクを取り出す必要があるかどうかを判断するために使用できます。