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

时间:2010-08-31 13:52:15

标签: macos 64-bit 32bit-64bit macos-carbon

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

我有这样的代码:

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

问题是我无法在vol_ref中传递0。在Mac 32位上我可以写:

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

提前致谢,
- Oleksii

2 个答案:

答案 0 :(得分:1)

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

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

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

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

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

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

答案 1 :(得分:0)

好。我真的不知道“默认音量”是什么。我所知道的是Carbon手册(文件管理器)说:

  

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

我唯一不确定的是第一卷是否是默认值...

P.S。我想问题是我不太明白“默认音量”究竟是什么; - )