如何在Mac OS X上枚举卷?

时间:2010-08-23 06:15:11

标签: c++ objective-c macos qt

我不是非常精通Mac OS X编程,但我正在开发一个需要有关存储设备信息的Qt应用程序。基本上是硬盘驱动器和USB拇指驱动器的列表。 最终结果应该像一个向量,其中包含每个设备的以下信息:

字符串:标签
string:安装点
string:设备描述(又名友好名称)
uint64:尺寸
布尔:可以拆卸吗?

我一直在Windows上这样做,以下帖子Get information about disk drives result on windows7 - 32 bit system给了我很大的帮助。然而,虽然我非常精通C / C ++,但我在Mac OS X编程,Cocoa和/或Objective-C方面并不是很好,所以任何帮助都会非常受欢迎。

3 个答案:

答案 0 :(得分:14)

这可以帮助您获得所需的大部分内容:

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);
}

答案 1 :(得分:4)

好吧,那天我们使用了FSGetVolumeInfo。至于可移除性,使用vMExtendedAttributes & 1<< bIsRemovable FSGetVolumeParms。 (实际上,我不记得那个特殊的API。有一个名为Driver Gestalt的东西,但它现在已经消失了。)

我想有一个闪亮的Objective-C界面,但如果没有其他人回复,至少有C方式。

答案 2 :(得分:4)

查看getmntinfo()(对于挂载点的枚举)和statfs()(有关已知挂载点的信息。)