2

ドライブをイジェクトせずにアンマウントすることを知っていますか。NSWorkspaceドライブをアンマウントする方法がいくつかありますが、ドライブをイジェクトすることもできます。

何か案が ?

4

3 に答える 3

3

私は次のようにそれを行っています、そしてそれはドライブをアンマウントしますが、それを排出しません。

(実際にはディスクを取り出したいのですが、アンマウントすることしかできません。: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);

これは私がまだ取り組んでいるコードであり、開発とテストが行​​われています。
「パス」を手動で作成しています。より良い方法を使用(および共有)して、一般的な方法でボリュームのパスを取得できます。おそらく、この答えには正しい方法でそれを行うためのヒントがあります。

開発が洗練されて完了したら更新します。

于 2013-01-29T07:58:43.827 に答える
2

これを行うには、DiskArbitration フレームワークで DADiskUnmount を使用します。

http://developer.apple.com/library/mac/#documentation/Darwin/Reference/DiscArbitrationFramework/DiskArbitration_h/index.html#//apple_ref/c/func/DADiskUnmount

于 2012-07-17T01:48:52.403 に答える
1

ディスクを取り出すには、あなたが述べたようにディスクをアンマウントしてから、__unmountCallback で次のようにします。

            DADiskRef disk2 = DADiskCopyWholeDisk(disk);
            DADiskEject(disk2,
                        kDADiskEjectOptionDefault,
                        NULL,
                        NULL);

任意のオブジェクトをコンテキストとして DADiskUnmount() に渡し、たとえば、__unmountCallback でそれぞれのディスクを取り出す必要があるかどうかを判断するために使用できます。

于 2013-05-09T14:15:43.570 に答える