3
給定一條路徑,在Mac OS X中,有沒有辦法告訴它是掛載的CD或DVD,而不是常規目錄,常規文件或掛載的DMG或其他可掛載文件類型?具體來說,我想知道這是否是一個CD或DVD時,用戶直接提供的路徑,或通過NSOpenPanel,或拖動CD上的應用程序。我需要在這些情況下采取特殊行動。如何判斷一個給定的路徑被安裝在Mac OS X中的可移動介質?
給定一條路徑,在Mac OS X中,有沒有辦法告訴它是掛載的CD或DVD,而不是常規目錄,常規文件或掛載的DMG或其他可掛載文件類型?具體來說,我想知道這是否是一個CD或DVD時,用戶直接提供的路徑,或通過NSOpenPanel,或拖動CD上的應用程序。我需要在這些情況下采取特殊行動。如何判斷一個給定的路徑被安裝在Mac OS X中的可移動介質?
查看Apple的VolumeToBSDNode示例代碼。我相信它應該有你需要的代碼位。
說明
顯示如何在所有安裝的卷迭代和檢索每個卷的BSD節點名稱(的/ dev /磁盤*)。該信息用於確定該卷是在CD,DVD還是其他存儲介質上。
肯特指出,PBHGetVolParmsSync
呼叫在這個例子中已被棄用。下面是使用新功能的差異:
- HParamBlockRec pb;
- // Use the volume reference number to retrieve the volume parameters. See the documentation
- // on PBHGetVolParmsSync for other possible ways to specify a volume.
- pb.ioParam.ioNamePtr = NULL;
- pb.ioParam.ioVRefNum = actualVolume;
- pb.ioParam.ioBuffer = (Ptr) &volumeParms;
- pb.ioParam.ioReqCount = sizeof(volumeParms);
-
- // A version 4 GetVolParmsInfoBuffer contains the BSD node name in the vMDeviceID field.
- // It is actually a char * value. This is mentioned in the header CoreServices/CarbonCore/Files.h.
- result = PBHGetVolParmsSync(&pb);
+ // Use FSGetVolumeParms instead of the deprecated PBHGetVolParmsSync
+ result = FSGetVolumeParms(actualVolume, &volumeParms, sizeof(volumeParms));
+
VolumeToBSDNode示例已過時,並且不會使用現代SDK(10.5或10.6)進行編譯。它依賴於PBHGetVolParmsSync()這是一個古老的遺留功能。有沒有人知道現代的方式來實現相同的結果? (從/到bsd設備名稱映射到邏輯卷名稱) – kent 2009-11-09 17:31:57
好點。用差異更新。 – nall 2009-11-09 19:31:25
非常感謝您爲此更新,絕不!做得好! +1 – kent 2009-11-10 13:23:02