我想要卸载没有EJECTING的磁盘。为此,我尝试了以下代码
{
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);
}
This code is from this question, Thanks to @zeFree
它工作但我想要动态路径到卷,而代码中的静态路径。我尝试将NSString更改为CFStringRef,然后尝试在路径的位置使用(" / volumes / Untitled"),但它仍然相同。
欢迎提出任何建议。
答案 0 :(得分: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
函数中提供回调处理程序,仍可以改进错误处理。