Как получить объем по умолчанию на Mac OS X 64-bit? - PullRequest
2 голосов
/ 31 августа 2010

Какой способ получить объем по умолчанию на Mac 64-разрядный?

У меня есть такой код:

    GetVolParmsInfoBuffer buf_64 = { 0 };  
 status = FSGetVolumeParms(vol_ref, // use default volume   
                     &buf_64, // write  
                  req_count);  

Проблема в том, что я не могу передать 0 в vol_ref. На 32-битном Mac я мог написать:

    GetVolParmsInfoBuffer buf_32 = { 0 };  
 HParamBlockRec pb;  
 pb.ioParam.ioCompletion = NULL; // not doing async I/O  
 pb.ioParam.ioNamePtr = NULL; // we don't use path name  
 pb.ioParam.ioVRefNum = 0; // use default volume  
 pb.ioParam.ioBuffer = reinterpret_cast(&buf_32); // write data here  
 pb.ioParam.ioReqCount = req_count;   
 OSErr err = PBHGetVolParmsSync(&pb);  
 ASSERT_EQ(err, noErr);  

Заранее спасибо,
- Алексей

Ответы [ 2 ]

1 голос
/ 31 августа 2010

В документах File Manager вы увидите группу функций под названием «Управление громкостью по умолчанию» . Все эти функции устарели.

Если вы будете искать в Google функции, в частности HSetVol, вы найдете это сообщение в списке рассылки Эрика Шлегеля , в котором говорится, что HSetVol имел эффект установки текущего рабочего каталога ( выражается как пара том / каталог) в Mac OS. Он также говорит, что он не работает в Mac OS X: он должен работать с функциями диспетчера файлов, но не устанавливает рабочий каталог, используемый для разрешения относительных путей в других API (например, open и fopen), как это делал в Mac OS.

Более того, эти функции недоступны в 64-битной Mac OS X. Поэтому ответ таков: нет, потому что нет тома по умолчанию.

Его старое значение было аналогично текущему рабочему каталогу, поэтому вы можете сделать то же самое, получив CWD и , разрешив этот путь к FSRef . Однако для приложения Mac OS X (особенно для приложения, которое не устанавливает CWD каким-либо образом, как это делают большинство), это не очень полезно: CWD по умолчанию для приложения - это /, корневой каталог загрузки. объем. С другой стороны, если вы запускаете свой исполняемый файл напрямую или из отладчика XCode, его CWD не будет /, что означает, что это может быть какой-то другой том - скорее всего, тот, на котором находится ваша домашняя папка.

Вам следует обращаться именно к загрузочному тому (или к тому, что вас интересует), а не пытаться получить или смоделировать получение каталога по умолчанию (текущего рабочего).

Для загрузочного тома вы можете попробовать kOnSystemDisk, который является одной из констант в Менеджере папок . Если это не сработает, используйте функцию Folder Manager FSFindFolder , чтобы извлечь системную папку, затем используйте File Manager FSGetVolumeInfo function , чтобы узнать, на каком томе он находится.

0 голосов
/ 31 августа 2010

Хорошо.Я действительно не знаю, что такое «громкость по умолчанию».Все, что я знаю, это то, что руководство Carbon (File Manager) говорит:

ioVRefNum Номер ссылки на том, 0 для тома по умолчанию или номер диска.

НуКажется, я нашел ответ на свой вопрос.

FSVolumeInfoParam vol_info = { 0 };
vol_info.ioVRefNum = kFSInvalidVolumeRefNum; // will obtain it
vol_info.volumeIndex = 1; // XXX: is it the default volume as well?
vol_info.whichInfo = kFSVolInfoNone; // don't pass volume info
err = PBGetVolumeInfoSync(&vol_info);

Единственное, в чем я не уверен, так это если 1-й том - по умолчанию ...

PS Я думаю,проблема в том, что я не совсем понимаю, что такое «громкость по умолчанию» на самом деле; -)

...