卸载驱动器/卷没有弹出
问题描述:
我想要卸载磁盘没有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”)处提及,但其仍然相同。
任何建议是值得欢迎的。
答
首先,强烈建议您不要使用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
函数提供的回调处理程序仍在改善。
解决了我的问题先生。想要通知某些打字错误是否存在,如'DASessionRef session = DASession'和'if(disk)CFRelease(disk)'必须位于声明的块内。 –