Размонтирование диска / тома без извлечения

Я хочу размонтировать диск без выброса. Для этого я попробовал следующий код

{
  NSString *path;
  CFStringRef *volumeName=(__bridge CFStringRef)path;
  DASessionRef session = DASessionCreate(kCFAllocatorDefault);
  CFURLRef pathRef = CFURLCreateWithString(NULL, CFSTR("/volumes/Untitled"), NULL);
  DADiskRef disk = DADiskCreateFromVolumePath(kCFAllocatorDefault, session, pathRef);
  DADiskUnmount(disk, kDADiskUnmountOptionForce, NULL, NULL);
}

Этот код из этого вопроса, спасибо @zeFree

Это работает, но я хочу динамический путь к тому, где, как в коде, его статический. Я попытался изменить NSString на CFStringRef, а затем попытался использовать в месте пути ("/volume /Untitled") упоминание, но оно все еще то же самое.

Любое предложение приветствуется.

1 ответ

Решение

Прежде всего, вы настоятельно не рекомендуется использовать kDADiskUnmountOptionForce,

Это метод размонтирования тома по указанному URL с базовой обработкой ошибок и управлением памятью.

- (BOOL)unmountVolumeAtURL:(NSURL *)url
    BOOL returnValue = NO;
    DASessionRef session = DASessionCreate(kCFAllocatorDefault);
    if (session) {
        DADiskRef disk = DADiskCreateFromVolumePath(kCFAllocatorDefault, session, (__bridge CFURLRef)url);
        if (disk) {
            DADiskUnmount(disk, kDADiskUnmountOptionDefault, NULL , NULL);
            returnValue = YES;
            CFRelease(disk);
        } else {
            NSLog(@"Could't create disk reference from %@", url.path);
        }
    } else {
      NSLog(@"Could't create DiskArbritation session");
    }

    if (session) CFRelease(session);
    return returnValue;
}

Обработка ошибок может быть еще улучшена путем предоставления обработчика обратного вызова в DADiskUnmount функция.

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