C++ 如何枚举Mac OS X上的卷?

C++ 如何枚举Mac OS X上的卷?,c++,objective-c,macos,qt,C++,Objective C,Macos,Qt,我不是很精通Mac OS X编程,但我正在开发一个需要存储设备信息的Qt应用程序。基本上是硬盘驱动器和USB拇指驱动器的列表。 最终结果应该像一个向量,包含每个设备的以下信息: 字符串:标签 字符串:装入点 字符串:设备描述(又名友好名称) uint64:大小 布尔:是可移动的吗? 我一直在Windows上做这件事,下面的帖子帮了我很大的忙。然而,尽管我非常精通C/C++,但我并不擅长Mac OS X编程、Cocoa和/或Objective-C,因此非常感谢您的帮助。好吧,回到我们使用的那一天。

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

字符串:标签
字符串:装入点
字符串:设备描述(又名友好名称)
uint64:大小
布尔:是可移动的吗?


我一直在Windows上做这件事,下面的帖子帮了我很大的忙。然而,尽管我非常精通C/C++,但我并不擅长Mac OS X编程、Cocoa和/或Objective-C,因此非常感谢您的帮助。

好吧,回到我们使用的那一天。至于可移除性,这将使用
vmextendedtattributes&1查看
getmntinfo()
(用于装载点的枚举)和
statfs()
(用于已知装载点的信息)。

这将为您提供大部分所需信息:

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

非常感谢。这正是我所需要的:)我没有找到一种像windows上的“友好名称”那样显示信息的方法,尽管我认为有一种方法可以在Mac上显示它(我认为这里是描述字段,但它是一个文件系统)。如果你知道如何检索这些信息,请让我知道。。。否则,这太棒了:)@emi:Hm,我不知道。使用I/O注册表资源管理器(位于
/Developer/Applications/Utilities
)我甚至找不到类似的东西。这曾经是正确的答案,但现在已被弃用。查看此问题以获取当前答案:指向
FSGetVolumeInfo
fsGetVolumeParams
的链接现在已断开。