2009-11-08 13 views
3

Étant donné un chemin, dans Mac OS X, existe-t-il un moyen de dire qu'il s'agit d'un CD ou DVD monté, par opposition à un répertoire normal, un fichier normal ou monté DMG ou un autre type de fichier montable? Plus précisément, j'aimerais savoir s'il s'agit d'un CD ou d'un DVD lorsqu'un utilisateur fournit un chemin directement, ou via le NSOpenPanel, ou fait glisser le CD sur l'application. Je dois prendre des mesures spéciales dans ces cas.Comment savoir si un chemin donné est monté sur un support amovible dans Mac OS X?

Répondre

6

Consultez le code d'exemple VolumeToBSDNode d'Apple. Je crois qu'il devrait avoir les bits de code dont vous avez besoin.

Description de

Montre comment itérer sur tous les volumes montés et récupérer le nom de noeud BSD (/ dev/disk *) pour chaque volume. Ces informations sont utilisées pour déterminer si le volume se trouve sur un CD, un DVD ou un autre support de stockage. Comme Kent le signale, l'appel PBHGetVolParmsSync dans cet exemple est obsolète. Voici un diff pour utiliser la nouvelle fonction:

-   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

L'exemple VolumeToBSDNode est obsolète et ne sera pas compilé avec les SDK modernes (10.5 ou 10.6). il repose sur PBHGetVolParmsSync() qui est une ancienne fonction héritée. Est-ce que quelqu'un sait d'une manière moderne pour atteindre les mêmes résultats? (mappage de/vers le nom de périphérique bsd vers le nom de volume logique) – kent

+0

bon point. mis à jour avec un diff. – nall

+0

merci beaucoup pour la mise à jour de ce, nall! bon travail! +1 – kent