【问题标题】:Cocoa Unmounting drive but not ejecting it可可卸载驱动器但不弹出它
【发布时间】:2013-05-09 22:15:43
【问题描述】:

你知道你要卸载驱动器而不弹出它。 NSWorkspace 有一些卸载驱动器的方法,但它也会弹出它们。

有什么想法吗?

【问题讨论】:

  • 您的意思是从驱动器中物理弹出 DVD 吗?
  • 不,就像使用磁盘实用程序一样。您可以挂载/卸载驱动器,也可以弹出驱动器。
  • 有什么区别(如果不是物理弹出DVD)?
  • FWIW diskutil 命令具有单独的“弹出”和“卸载”选项。见man diskutil

标签: cocoa nsworkspace


【解决方案1】:

我按以下方式进行操作,它会卸载驱动器但不会弹出它。

(其实是想弹出磁盘,只能unmount磁盘。: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);

这是我仍在处理的代码,正在开发和测试中。
我正在手动创建“路径”。您可以使用(和共享)更好的方法以通用方式获取音量路径。也许this answer 暗示了正确的做法。

当我的开发完善和完成时,我会更新。

【讨论】:

  • 效果很好。只需在 XCode 和头文件中添加 DiskArbitration FrameWork。并弹出我使用的磁盘:[[NSWorkspace sharedWorkspace] unmountAndEjectDeviceAtURL:[NSURL fileURLWithPath:device.path] error:&amp;error];
【解决方案2】:
【解决方案3】:

要弹出磁盘,请按照您的说明卸载磁盘,然后在 __unmountCallback 中执行以下操作:

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

您可以将任何对象作为上下文传递给 DADiskUnmount(),然后,例如,使用它来确定是否应在 __unmountCallback 中弹出相应的磁盘。

【讨论】:

    猜你喜欢
    • 2016-04-20
    • 2012-07-22
    • 2012-01-02
    • 2020-01-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多