我想找到给定NSString路径的卷的挂载点。cocoa objective-c for os x:从路径获取卷装入点
虽然我是Cocoa和Objective-C的初学者,但我试图做到“优雅”,即。使用提供的类之一,而不是进行外部shell调用或列出已挂载的文件系统并查找路径属于哪一个。
我找到了NSWorkspace和getFileSystemInfoForPath,但没有提到挂载点。
任何人都可以帮忙吗?
感谢
我想找到给定NSString路径的卷的挂载点。cocoa objective-c for os x:从路径获取卷装入点
虽然我是Cocoa和Objective-C的初学者,但我试图做到“优雅”,即。使用提供的类之一,而不是进行外部shell调用或列出已挂载的文件系统并查找路径属于哪一个。
我找到了NSWorkspace和getFileSystemInfoForPath,但没有提到挂载点。
任何人都可以帮忙吗?
感谢
这应该去的东西沿着这些线路:
+ (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;
}
失败案例:存在两卷,“长名称卷”和“卷”。输入路径是“/ Volumes/Volume with long name/Some file”,并且循环首先进入“/ Volumes/Volume”。你的方法返回“/ Volumes/Volume”,这是错误的。 – 2010-01-09 13:39:07
感谢您的建议。但我也发现了一个问题。 如果我使用路径 /Volumes/NO NAME/some/dir/in/bootcamp 返回的卷是os x分区的名称。 我希望有一些类/方法找到这些信息,而不是诉诸字符串操作来猜测音量。 – 2010-01-09 14:07:34
这是未经测试的代码,我甚至没有尝试编译。预计错误和边缘情况。它来自我为iMedia浏览器中的Aperture解析器编写的代码。在那里我有Aperture存储的卷名,需要找到完整的路径。 我想通过确保路径字符串以/结尾可以解决失败案例。 – 2010-01-09 16:04:39
我这个月运行它已被要求后,但无论如何,在Python标准库中有os.path.ismount()
功能,检测路径是否为安装点。从它的描述它会这样:
功能检查是否
path
的父,path/..
,比path
不同的设备上,或是否path/..
和path
指向相同的设备在相同的i-node - 这应该检测所有Unix和POSIX变体的挂载点。
路径是什么?卷上的文件,支持卷的设备或其他内容? – 2010-01-09 13:41:48
卷 – 2010-01-09 17:48:59
上的文件的路径我不认为有一个Cocoa方法。为了什么目的,你需要安装点?解决方案将取决于此。例如,如果卷名从Finder更改,装入点将会更改;是否需要卷名称或设备特有的独立于用户分配给它的卷名称? – Yuji 2010-01-09 19:47:30