Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Is FSGetVolumeInfo the recommended alternative to NSWorkspace's deprecated mountedLocalVolumePaths method?

I need to get a list of mounted local volumes on Mac OS X. Previously, the Cocoa class NSWorkspace had a mountedLocalVolumePaths method for getting the array of mount points for such volumes. Since Lion, this is now deprecated, with no hint in the documentation about what we should use instead.

The only other Apple-specific API I have found which provides this information is the FSGetVolumeInfo function from the CoreServices.framework. This enumerates the mounted volumes if you pass kFSInvalidVolumeRefNum for the volume parameter and 1..N for the volumeIndex. It returns the volume name (as a HFSUniStr255) via the volumeName output parameter and the mount point via the rootDirectory output parameter as a FSRef, which in turn can be converted to a URL using CFURLCreateFromFSRef().

This seems a little convoluted and unnecessarily low-level.

There are also the BSD-level functions, getfsstat() and getmntinfo() which both emit an array of statfs structs. The API seems saner than the Core Services version.

Are there any higher-level replacements I should be using instead?

like image 656
pmdj Avatar asked Jun 01 '12 14:06

pmdj


1 Answers

There is a much simpler replacement, in a much more logical place than the older methods: NSFileManager's mountedVolumeURLsIncludingResourceValuesForKeys:options: method.

like image 176
Peter Hosey Avatar answered Sep 28 '22 21:09

Peter Hosey