Как установить имя тома при преобразовании 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 всегда безопасно.