2010-08-31 99 views
2

在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

回答

0

嘛。我真的不知道「默認音量」是什麼。我所知道的是,碳手動(文件管理器)說:

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

附:我想問題是我不太明白什麼是「默認音量」;-)

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獲取它所處的音量。

相關問題