How to enumerate volumes on Mac OS X?

后端 未结 3 887
無奈伤痛
無奈伤痛 2020-12-24 04:27

I am not very proficient in Mac OS X programming, but I am working on a Qt application which needs info about the storage devices. Basically a list of hard drives and USB th

相关标签:
3条回答
  • 2020-12-24 05:01

    This should get you most of what you're looking for:

    NSWorkspace   *ws = [NSWorkspace sharedWorkspace];
    NSArray     *vols = [ws mountedLocalVolumePaths];
    NSFileManager *fm = [NSFileManager defaultManager];
    
    for (NSString *path in vols) 
    {
        NSDictionary* fsAttributes;
        NSString *description, *type, *name;
        BOOL removable, writable, unmountable, res;
        NSNumber *size;
    
        res = [ws getFileSystemInfoForPath:path 
                               isRemovable:&removable 
                                isWritable:&writable 
                             isUnmountable:&unmountable
                               description:&description
                                      type:&type];
        if (!res) continue;
        fsAttributes = [fm fileSystemAttributesAtPath:path];
        name         = [fm displayNameAtPath:path];
        size         = [fsAttributes objectForKey:NSFileSystemSize];
    
        NSLog(@"path=%@\nname=%@\nremovable=%d\nwritable=%d\nunmountable=%d\n"
               "description=%@\ntype=%@, size=%@\n\n",
              path, name, removable, writable, unmountable, description, type, size);
    }
    
    0 讨论(0)
  • 2020-12-24 05:05

    Take a look at getmntinfo() (for an enumeration of mount points) and statfs() (for information about a known mount point.)

    0 讨论(0)
  • 2020-12-24 05:07

    Well, back in the day we used FSGetVolumeInfo. As for removability, that would be FSGetVolumeParms using vMExtendedAttributes & 1<< bIsRemovable. (Actually, I don't recall that particular API. There was something called Driver Gestalt, but it's gone now.)

    I suppose there's a shiny Objective-C interface, but if nobody else replies, at least there's the C way.

    0 讨论(0)
提交回复
热议问题