在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
答案 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 CWD和resolving 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。我想问题是我不太明白“默认音量”究竟是什么; - )