os x的cocoa objective-c:从路径获取卷装入点

时间:2010-01-09 10:43:39

标签: objective-c cocoa

我想找到给定NSString路径的卷的挂载点。

虽然我是Cocoa和Objective-C的初学者,但我试图“优雅地”这样做,即。使用提供的类之一,而不是进行外部shell调用或列出已安装的文件系统,并找到路径所属的类。

我确实找到了NSWorkspace和getFileSystemInfoForPath,但它没有提到挂载点。

有人可以帮忙吗?

感谢

2 个答案:

答案 0 :(得分:4)

这应该是这样的:

+ (NSString*)volumeNameForPath:(NSString *)inPath
{
    HFSUniStr255 volumeName;
    FSRef volumeFSRef;
    unsigned int volumeIndex = 1;

    while (FSGetVolumeInfo(kFSInvalidVolumeRefNum, volumeIndex++, NULL, kFSVolInfoNone, NULL, &volumeName, &volumeFSRef) == noErr) {
        NSURL *url = [(NSURL *)CFURLCreateFromFSRef(NULL, &volumeFSRef) autorelease];
        NSString *path = [url path];

        if ([inPath hasPrefix:path]) {
            return [NSString stringWithCharacters:volumeName.unicode length:volumeName.length]
        }
    }

    return nil;
}

答案 1 :(得分:1)

我被问到这个问题已经过了一个月,但无论如何:在Python标准库中有os.path.ismount()函数,它检测路径是否是挂载点。从描述中可以看出来:

  

该函数检查path的父级path/..是否与path不同,或者path/..path是否指向在同一设备上使用相同的i-node - 这应该检测所有Unix和POSIX变体的挂载点。