簡體   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