【问题标题】:How to set volume name when converting MacOSPath to POSIX将 MacOSPath 转换为 POSIX 时如何设置卷名
【发布时间】:2012-07-20 22:27:29
【问题描述】:

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

我的卷:myFolder:myFile.jpg

类似于:

/my Vol/myFolder/myFile.jpg

如果 my Vol 是我的系统磁盘,/myFolder/myFile.jpg 工作正常,但如果它位于不同的卷上,则无法工作(即。 我的 Vol/myFolder/myFile.jpg 失败。

如何在此处指定音量?

谢谢!

比尔

【问题讨论】:

  • 不知道这个编辑对不对,因为例子中路径分隔符是冒号还是斜杠不一致,所以不知道应该是HFS路径.
  • @JonathanGrynspan:是的,kCFURLHFSPathStyle 仍然指的是冒号分隔的路径。
  • 这就是我的答案使用它的原因。 ;)

标签: c++ macos posix macos-carbon


【解决方案1】:

一种避免硬编码的方法(考虑未安装在/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);
}

【讨论】:

    【解决方案2】:

    对于 POSIX 样式路径,您需要在二级卷前面加上“/Volumes”。所以你的例子是,/Volumes/myVol/myFolder/myFile.jpg。请注意,即使 myVol 是您的系统磁盘,这也可以。所以以 /Volumes 开头总是安全的。

    【讨论】:

    • 哎呀!这是硬编码,将来或在非标准系统配置上可能会失败。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-01
    • 1970-01-01
    • 2018-03-07
    • 1970-01-01
    相关资源
    最近更新 更多