objective-c - 返回文件夹或卷的卷名称

标签 objective-c macos cocoa url

我需要获取用户选择的任何文件夹的卷名称。引用this topic ,我创建了以下函数。

- (NSString *)getVolumeName:(NSString *)path {
    // path is the path of a folder
    NSURL *url = [NSURL fileURLWithPath:[path stringByDeletingLastPathComponent]];
    NSError *error;
    NSString *volumeName;
    [url getResourceValue:&volumeName forKey:NSURLVolumeNameKey error:&error];
    return volumeName;
}

它在大多数情况下都有效。但如果用户选择已安装的卷,则可能会失败。例如,我将一张 SDHC 卡插入 iMac 的卡槽中。如果我选择这个卷而不是其中的文件夹,上面的函数可以返回硬盘驱动器的名称。返回文件夹或卷的卷名的正确方式是什么?也许使用 AppleScript?

谢谢,

更新

也许像下面这样?

- (NSString *)getVolumeName:(NSString *)path {
    NSURL *url = [NSURL fileURLWithPath:[path stringByDeletingLastPathComponent]];
    if ([[url path] isEqualTo:@"/Volumes"]) {
        return [path lastPathComponent];
    } else {
        NSError *error;
        NSString *volumeName;
        [url getResourceValue:&volumeName forKey:NSURLVolumeNameKey error:&error];
        return volumeName; 
    }
}

最佳答案

我目前无法对此进行测试,但我认为您应该直接在 给定路径,并且不删除最后一个路径组件:

- (NSString *)getVolumeName:(NSString *)path {
    // path is the path of a folder
    NSURL *url = [NSURL fileURLWithPath:path];
    NSError *error;
    NSString *volumeName;
    [url getResourceValue:&volumeName forKey:NSURLVolumeNameKey error:&error];
    return volumeName;
}

关于objective-c - 返回文件夹或卷的卷名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20519577/

相关文章:

objective-c - 使用 ASIHTTPRequest 作为 NSDictionary Key

ios - static const 与 extern const 有何不同?

iphone - iOS 为所有方向启用旋转 iOS 5

python - 在 MacOS 上为 Python 3.6 初始化 virtualenvwrapper

python - 在 OSX Lion 上强加链接到特定的 python 库

swift - 如何获得 iMovie 应用程序中看到的黑色标题栏?

ios - Xcode - 如何修复 'NSUnknownKeyException',原因 : … this class is not key value coding-compliant for the key X"error?

objective-c - xcode 4.2 将 View Controller 类设置为自定义类错误

objective-c - 为什么自定义 setter 的存在会破坏我的自定义 getter?

objective-c - 在快速枚举中输入正确的值