Как перечислить тома в Mac OS X? - PullRequest
14 голосов
/ 23 августа 2010

Я не очень опытен в программировании на Mac OS X, но я работаю над приложением Qt, которому нужна информация об устройствах хранения.В основном список жестких дисков и USB-накопителей.Конечный результат должен быть похож на вектор, который содержит следующую информацию для каждого устройства:

string: Labelстрока: точка монтированиястрока: описание устройства (также понятное имя)uint64: размерbool: это съемный?

Я делал это в Windows, и в следующем посте Получите информацию о результатах работы дисков в Windows7 - 32-битная система очень помогла.Тем не менее, хотя я очень хорошо владею C / C ++, я не очень хорош в программировании на Mac OS X, в Cocoa и / или Objective-C, поэтому любая помощь будет высоко оценена.

Ответы [ 3 ]

14 голосов
/ 23 августа 2010

Это даст вам большую часть того, что вы ищете:

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);
}
4 голосов
/ 23 августа 2010

Взгляните на getmntinfo() (для перечисления точек монтирования) и statfs() (для информации об известной точке монтирования.)

4 голосов
/ 23 августа 2010

Ну, назад в тот день, когда мы использовали FSGetVolumeInfo.Что касается возможности удаления, то это будет FSGetVolumeParms с использованием vMExtendedAttributes & 1<< bIsRemovable.(На самом деле, я не помню этот конкретный API. Там было что-то, называемое Driver Gestalt, но его уже нет.)

Полагаю, есть блестящий интерфейс Objective-C, но если никто не отвечает, по крайней мере, естьпуть С.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...