Apple 不支持此功能,但您可以使用 volfs 文件系统来执行此操作,这是 Carbon 内部所做的。请参阅 Apple 提供的以下文档:
http://developer.apple.com/legacy/library/qa/qa2001/qa1113.html
这是一个从卷 ID 和目录 ID 创建 CFURLRef 的函数:
CFURLRef CreateURLFromVolumeIDandDirectoryID(dev_t volumeID, SInt32 directoryID)
{
CFStringRef thePath = CFStringCreateWithFormat(kCFAllocatorDefault, NULL,
CFSTR("/.vol/%d/%d"), volumeID, (int) directoryID);
CFURLRef theURL = CFURLCreateWithFileSystemPath(kCFAllocatorDefault, thePath,
kCFURLPOSIXPathStyle, false);
CFRelease(thePath);
return theURL;
}
要使用 volfs,您还需要将卷参考号转换为卷 ID。这是一种方法:
dev_t ConvertVolumeRefNumtoVolumeID(FSVolumeRefNum refNum)
{
FSRef root;
OSErr error = FSGetVolumeInfo(refNum, 0, NULL, kFSVolInfoNone, NULL, NULL, &root);
if(error != noErr)
return 0;
UInt8 path[500];
OSStatus status = FSRefMakePath(&root, path, 500);
if(status != noErr)
return 0;
struct stat volStats;
int err = stat((const char*)path, &volStats);
if(err != 0)
return 0;
return volStats.st_dev;
}
根据链接的文档,应用程序不应该这样做,这可能会在任何未来版本的 OS X 中停止工作。但是你问...
此外,当一个卷被卸载然后重新安装时,卷参考号不能保证保持不变,所以如果你将它们写入磁盘,你就会遇到另一个问题。