繁体   English   中英

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

[英]How to get default volume on Mac OS X 64-bit?

在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

在文件管理器文档中,您会注意到一个名为“操纵默认卷”的功能组。 所有这些功能均已弃用。

如果您在Google中搜索其中的功能,特别是HSetVol ,则会在Eric Sc​​hlegel的邮件列表中找到该帖子 ,其中说HSetVol具有在Mac OS上设置当前工作目录(表示为卷/目录对)的作用。 他还说它在Mac OS X上不起作用:它应该在文件管理器功能上起作用,但不能像在Mac OS上那样设置用于解析其他API(例如openfopen )中相对路径的工作目录。 。

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

它的旧含义类似于当前工作目录,因此您可以通过获取CWD并将该路径解析为FSRef来执行相同的操作 但是,对于Mac OS X应用程序(尤其是没有通过任何方式设置CWD的应用程序,大多数情况下没有这样做),这并不是非常有用的:应用程序的默认CWD是/,即引导的根目录体积。 另一方面,如果直接或在Xcode的Debugger下运行可执行文件,则其CWD不会是/,这意味着它可能是其他一些卷—最有可能是上面带有Home文件夹的那个卷。

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

对于启动卷,您可以尝试kOnSystemDisk ,它是Folder Manager的常数之一 如果那不起作用,请使用文件夹管理器的FSFindFolder函数检索系统文件夹,然后使用文件管理器的FSGetVolumeInfo函数获取其所在的卷。

好。 我真的不知道什么是“默认音量”。 我所知道的是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);

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

PS:我想问题是我不太了解什么是“默认音量” ;-)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM