如何在Mac OS X 64位上获取默认音量?

问题描述:

在Mac 64位上获取默认音量的方法是什么?如何在Mac OS X 64位上获取默认音量?

我有一个这样的代码:

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

的问题是,我不能在vol_ref传递0。在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); 

感谢,
      - 奥莱克西

+0

“默认音量”是什么意思?你打算怎么处理它? – 2010-08-31 14:00:30

嘛。我真的不知道“默认音量”是什么。我所知道的是,碳手动(文件管理器)说:

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日量是一个默认的唯一的事情...

附:我想问题是我不太明白什么是“默认音量”;-)

在文件管理器文档中,您会注意到一个名为“Manipulating the Default Volume”的功能组。所有这些功能都被弃用。

如果谷歌搜索的功能在其中,尤其是HSetVol,你会发现this mailing list post by Eric Schlegel,它说HSetVol有设置在Mac OS当前工作目录(表示为体积/目录对)的效果。他还表示,它不适用于Mac OS X:它应该在文件管理器功能上工作,但不会设置用于在其他API中解析相对路径的工作目录(例如,openfopen),就像它在Mac OS上一样。

此外,这些功能在64位Mac OS X中不可用。所以答案是:您不这样做,因为没有默认卷。

它的旧含义类似于当前的工作目录,因此您可以通过getting the CWDresolving that path to an FSRef做同样的事情。但是,对于Mac OS X应用程序(尤其是没有以任何方式设置CWD的应用程序(大多数不应用)),这不是非常有用:应用程序的默认CWD是/,引导的根目录卷。另一方面,如果直接运行可执行文件或在Xcode的调试器下运行,它的CWD将不会是/,这意味着它可能是其他卷 - 最有可能的是,其上有您的主文件夹。

您应该参考引导卷(或您感兴趣的任何卷),而不是尝试获取或模拟获取默认(当前工作)目录。

对于启动卷,您可以尝试kOnSystemDisk,这是the constants in the Folder Manager之一。如果这不起作用,请使用Folder Manager's FSFindFolder function检索系统文件夹,然后使用File Manager's FSGetVolumeInfo function获取它所处的音量。