Размонтирование диска / тома без извлечения
Я хочу размонтировать диск без выброса. Для этого я попробовал следующий код
{
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
функция.