如何使用 DiskArbitration 或其他框架在 macOS 上获取磁盘类型(SSD、HDD、Optical)
How to get disk type (SSD, HDD, Optical) on macOS using DiskArbitration or other framework
我正在尝试弄清楚如何使用 Swift 在 macOS 上获取一些额外的磁盘属性。我对磁盘类型(如 SSD、HDD、光学)特别感兴趣。
我正在使用以下代码获取已安装卷的列表:
FileManager.default.mountedVolumeURLs(includingResourceValuesForKeys: nil)
然后我遍历所有卷并使用 属性 键获取其他属性,例如总磁盘 space:
for volumeUrl in mountedVolumeURLs {
if let values = try? volumeUrl.resourceValues(forKeys: [.volumeTotalCapacityKey, .volumeNameKey, .volumeIsInternalKey] {
// Do something
}
}
我找不到获取类型的资源键。然后我看到还有一个名为 DiskArbitration
.
的附加框架
我曾经按照代码获取 BSD 名称,希望使用 IOReg 找到类型,但这对我也没有帮助(我只是使用这段代码来获取错误的名称,我认为 DiskArbitration 是为了仅卸载/安装卷)。
if let session = DASessionCreate(kCFAllocatorDefault)
{
let mountedVolumeURLs = FileManager.default.mountedVolumeURLs(includingResourceValuesForKeys: nil)!
for volumeURL in mountedVolumeURLs
{
if let disk = DADiskCreateFromVolumePath(kCFAllocatorDefault, session, volumeURL as CFURL)
{
if let bsdname = DADiskGetBSDName(disk)
{
let bsdString = String(cString : bsdname)
print(volumeURL.path, bsdString)
}
}
}
}
是否可以在 macOS 上使用 (public) 框架获取此信息?
你很接近,DiskArbitration
中有一个APIDADiskCopyDescription
,其中returns一个包含很多信息的字典
if let session = DASessionCreate(kCFAllocatorDefault)
{
let mountedVolumeURLs = FileManager.default.mountedVolumeURLs(includingResourceValuesForKeys: nil)!
for volumeURL in mountedVolumeURLs
{
if let disk = DADiskCreateFromVolumePath(kCFAllocatorDefault, session, volumeURL as CFURL)
{
if let diskInfo = DADiskCopyDescription(disk) as? [String:Any]
{
print(volumeURL.path, diskInfo)
}
}
}
}
但据我所知它没有显示磁盘是SSD还是HD的信息,这可以通过IOKit
中的IORegistry来确定。
我正在尝试弄清楚如何使用 Swift 在 macOS 上获取一些额外的磁盘属性。我对磁盘类型(如 SSD、HDD、光学)特别感兴趣。
我正在使用以下代码获取已安装卷的列表:
FileManager.default.mountedVolumeURLs(includingResourceValuesForKeys: nil)
然后我遍历所有卷并使用 属性 键获取其他属性,例如总磁盘 space:
for volumeUrl in mountedVolumeURLs {
if let values = try? volumeUrl.resourceValues(forKeys: [.volumeTotalCapacityKey, .volumeNameKey, .volumeIsInternalKey] {
// Do something
}
}
我找不到获取类型的资源键。然后我看到还有一个名为 DiskArbitration
.
我曾经按照代码获取 BSD 名称,希望使用 IOReg 找到类型,但这对我也没有帮助(我只是使用这段代码来获取错误的名称,我认为 DiskArbitration 是为了仅卸载/安装卷)。
if let session = DASessionCreate(kCFAllocatorDefault)
{
let mountedVolumeURLs = FileManager.default.mountedVolumeURLs(includingResourceValuesForKeys: nil)!
for volumeURL in mountedVolumeURLs
{
if let disk = DADiskCreateFromVolumePath(kCFAllocatorDefault, session, volumeURL as CFURL)
{
if let bsdname = DADiskGetBSDName(disk)
{
let bsdString = String(cString : bsdname)
print(volumeURL.path, bsdString)
}
}
}
}
是否可以在 macOS 上使用 (public) 框架获取此信息?
你很接近,DiskArbitration
中有一个APIDADiskCopyDescription
,其中returns一个包含很多信息的字典
if let session = DASessionCreate(kCFAllocatorDefault)
{
let mountedVolumeURLs = FileManager.default.mountedVolumeURLs(includingResourceValuesForKeys: nil)!
for volumeURL in mountedVolumeURLs
{
if let disk = DADiskCreateFromVolumePath(kCFAllocatorDefault, session, volumeURL as CFURL)
{
if let diskInfo = DADiskCopyDescription(disk) as? [String:Any]
{
print(volumeURL.path, diskInfo)
}
}
}
}
但据我所知它没有显示磁盘是SSD还是HD的信息,这可以通过IOKit
中的IORegistry来确定。