Как перечислять тома в Mac OS X?

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

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

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

14
задан Community 23 May 2017 в 12:32
поделиться

3 ответа

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

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);
}
14
ответ дан 1 December 2019 в 12:37
поделиться

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

4
ответ дан 1 December 2019 в 12:37
поделиться

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

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

4
ответ дан 1 December 2019 в 12:37
поделиться
Другие вопросы по тегам:

Похожие вопросы: