Как установить имя тома при преобразовании MacOSPath в POSIX

В приложении Carbon мне нужно преобразовать путь MacOS в стиле HFS в POSIX, который можно использовать в вызове fopen(). Например:

мой том:myFolder:myFile.jpg

что-то вроде:

/ my Vol/myFolder/myFile.jpg

Если мой Vol - это мой системный диск, /myFolder/myFile.jpg работает просто отлично, но если он находится на другом томе, он не работает (т.е. мой Vol/myFolder/myFile.jpg не работает.

Как мне указать громкость здесь?

Спасибо!

Билл

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);
}

Для путей в стиле POSIX вы должны предварять вторичные тома с помощью "/Volumes". Таким образом, ваш пример будет, /Volumes/myVol/myFolder/myFile.jpg. Обратите внимание, даже если myVol - системный диск, это работает. Таким образом, предварительное соединение с / Volumes всегда безопасно.

Другие вопросы по тегам