C++ 如何枚举Mac OS X上的卷?
我不是很精通Mac OS X编程,但我正在开发一个需要存储设备信息的Qt应用程序。基本上是硬盘驱动器和USB拇指驱动器的列表。 最终结果应该像一个向量,包含每个设备的以下信息: 字符串:标签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,因此非常感谢您的帮助。好吧,回到我们使用的那一天。
字符串:装入点
字符串:设备描述(又名友好名称)
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
的链接现在已断开。