2009-11-08 23 views
3

給定一條路徑,在Mac OS X中,有沒有辦法告訴它是掛載的CD或DVD,而不是常規目錄,常規文件或掛載的DMG或其他可掛載文件類型?具體來說,我想知道這是否是一個CD或DVD時,用戶直接提供的路徑,或通過NSOpenPanel,或拖動CD上的應用程序。我需要在這些情況下采取特殊行動。如何判斷一個給定的路徑被安裝在Mac OS X中的可移動介質?

回答

6

查看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)); 
+ 
+1

VolumeToBSDNode示例已過時,並且不會使用現代SDK(10.5或10.6)進行編譯。它依賴於PBHGetVolParmsSync()這是一個古老的遺留功能。有沒有人知道現代的方式來實現相同的結果? (從/到bsd設備名稱映射到邏輯卷名稱) – kent 2009-11-09 17:31:57

+0

好點。用差異更新。 – nall 2009-11-09 19:31:25

+0

非常感謝您爲此更新,絕不!做得好! +1 – kent 2009-11-10 13:23:02