卸载 Drive/volume 而不弹出
Unmounting Drive/volume without 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,然后尝试在 path("/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
函数中提供回调处理程序来改进。
我想在不弹出的情况下卸载磁盘。为此,我尝试了以下代码
{
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,然后尝试在 path("/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
函数中提供回调处理程序来改进。