Какао Размонтирует диск, но не извлекает его

Знаете ли вы, чтобы отключить диск без извлечения его. NSWorkspace есть несколько способов размонтировать диски, но он также извлекает их.

Любая идея?

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);

Это код, над которым я все еще работаю и который находится в стадии разработки и тестирования.
Я создаю "путь" вручную. Вы можете использовать (и поделиться) лучший метод, чтобы получить общий путь к объему. Возможно, в этом ответе есть подсказки, как сделать это правильно.

Я обновлю, когда моя разработка будет доработана и завершена.

Для этого используйте DADiskUnmount в инфраструктуре DiskArbitration.

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

Чтобы извлечь диск, размонтируйте диск, как вы указали, а затем в вашем __unmountCallback сделайте следующее:

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

Вы можете передать любой объект в качестве контекста в DADiskUnmount(), а затем, например, использовать его, чтобы определить, должен ли соответствующий диск быть извлечен в __unmountCallback.

Другие вопросы по тегам