卸载驱动器/卷没有弹出

问题描述:

我想要卸载磁盘没有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函数提供的回调处理程序仍在改善。

+0

解决了我的问题先生。想要通知某些打字错误是否存在,如'DASessionRef session = DASession'和'if(disk)CFRelease(disk)'必须位于声明的块内。 –