将MacOSPath转换为POSIX时如何设置卷名

时间:2012-07-20 22:27:30

标签: c++ macos posix macos-carbon

Carbon 应用中,我需要将HFS样式的MacOS路径转换为可在fopen()调用中使用的POSIX路径。例如:

my Vol:myFolder:myFile.jpg

类似于:

/ my Vol / myFolder / myFile.jpg

如果我的Vol 是我的系统磁盘, /myFolder/myFile.jpg 工作得很好,但是如果它在不同的卷上,它就不起作用(即。 我的Vol / myFolder / myFile.jpg 失败。

如何在此指定音量?

谢谢!

比尔

2 个答案:

答案 0 :(得分:2)

避免硬编码的方法(考虑未安装在/Volumes/中的卷,例如手动安装的卷。)

CFStringRef myHFSPath = CFSTR("Macintosh HD:Some Folder:Some Subfolder:Some File");

CFURLRef url = CFURLCreateWithFileSystemPath(NULL, myHFSPath, kCFURLHFSPathStyle, FALSE);
if (url) {
    UInt8 posixPath[PATH_MAX * 2]; /* Extra-large because why not? */
    if (CFURLGetFileSystemRepresentation(url, TRUE, posixPath, sizeof(posixPath)) {
        /*
            posixPath now contains a C string suitable for passing to BSD and
            C functions like fopen().
        */
    }
    CFRelease(url);
}

答案 1 :(得分:0)

对于POSIX样式路径,您需要在辅助卷前加上“/ Volumes”。所以你的例子就是 /Volumes/myVol/myFolder/myFile.jpg 。请注意,即使 myVol 是您的系统磁盘,也可以使用。因此,使用 / Volumes 进行前导始终是安全的。