Я не очень опытен в программировании на Mac OS X, но я работаю над приложением Qt, которому нужна информация об устройствах хранения. В основном список жестких дисков и USB-накопителей. Конечный результат должен быть похож на вектор, который содержит следующую информацию для каждого устройства:
string: Label
строка: точка монтирования
строка: описание устройства (также понятное имя)
uint64: размер
bool: Является ли съемным?
Я делал это в Windows, и следующий пост Получил информацию о результатах работы дисков в 32-битной системе windows7 - . Однако, хотя я очень хорошо владею C / C ++, я не очень хорош в программировании на Mac OS X, в Cocoa и / или Objective-C, поэтому любая помощь будет высоко оценена.
Это должно дать вам большую часть того, что вы ищете:
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);
}
Взгляните на getmntinfo ()
(для перечисления точек монтирования) и statfs ()
(для информации об известной известной точке монтирования).
Ну, раньше мы использовали FSGetVolumeInfo
. Что касается возможности удаления, то это будет FSGetVolumeParms
с использованием vMExtendedAttributes & 1<< bIsRemovable
. (На самом деле, я не помню этот конкретный API. Было что-то под названием Driver Gestalt, но сейчас его нет.)
Я полагаю, что есть блестящий интерфейс Objective-C, но если никто больше не отвечает, по крайней мере, есть способ C .