我试图弄清楚如何使用Swift在macOS上获得一些其他磁盘属性。我对磁盘的类型(例如SSD,HDD,光学)特别感兴趣。
我正在使用以下代码获取已安装卷的列表:
FileManager.default.mountedVolumeURLs(includingResourceValuesForKeys: nil)
然后,我遍历所有卷并使用属性键获取其他属性,例如总磁盘空间:
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上的(公共)框架获取此信息?
你是相当接近,有一个APIDADiskCopyDescription
在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 diskInfo = DADiskCopyDescription(disk) as? [String:Any]
{
print(volumeURL.path, diskInfo)
}
}
}
}
但据我所知,它不显示磁盘是SSD还是HD的信息,这可以通过中的IORegistry确定IOKit
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句