有几种不同的方法可以使用不同的API列出OS X上的安装量。在最高(最简单)的水平上,您可以使用NSFileManager的 mountedVolumeURLsIncludingResourceValuesForKeys:options:
. 。这是一个缩写的例子:
NSArray *urls = [[NSFileManager defaultManager] mountedVolumeURLsIncludingResourceValuesForKeys:@[NSURLVolumeNameKey] options:0];
for (NSURL *url in urls) {
NSLog(@"Volume mounted at: %@", [url path]);
}
下一个选项将我们带回C领域 - 您的原始方法非常接近。在OS X(和BSD)上,没有 getmntent()
;相反,有 getmntinfo()
, ,非常相似。列出通过 getmntinfo()
, ,您可以执行以下操作:
struct statfs* mounts;
int num_mounts = getmntinfo(&mounts, MNT_WAIT);
if (num_mounts < 0) {
// do something with the error
}
for (int i = 0; i < num_mounts; i++) {
NSLog(@"Disk type '%s' mounted at: %s", mounts[i].f_fstypename, mounts[i].f_mntonname);
}
自10.6发行以来,我已经并排使用了这两个API。 getmntinfo()
总是比 [NSFileManager mountedVolumeURLsIncludingResourceValuesForKeys:options:]
: :后者将过滤 /dev
以及您可能想知道或可能不知道的其他文件系统。但是,对于您插入系统的磁盘通常是可靠的。
正如您所注意到的那样,Diskarbitation框架背后的目的是不同的。磁盘差是监视和管理磁盘资产。使用DA,只要安装新磁盘或卸载新磁盘,就可以被调用。您还可以通过重命名,安装,卸载或弹出它们来管理这些磁盘,并在安装/卸载过程中插入自己,并可能暂停请求执行此操作。但是,正如您指出的那样,它没有提供用于列出现有磁盘的接口。一旦获得了安装卷的列表,DA将是一个绝佳的下一站(当然,取决于您获取该列表的原因!)。