繁体   English   中英

如何使用 DiskArbitration 或其他框架在 macOS 上获取磁盘类型(SSD、HDD、Optical)

[英]How to get disk type (SSD, HDD, Optical) on macOS using DiskArbitration or other framework

我试图弄清楚如何使用 Swift 在 macOS 上获得一些额外的磁盘属性。 我对磁盘的类型(如 SSD、HDD、Optical)特别感兴趣。

我正在使用以下代码获取已安装卷的列表:

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 上的(公共)框架获取此信息?

你非常接近,在DiskArbitration DADiskCopyDescription返回一个包含大量信息的字典

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 确定。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM