Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift 如何使用DiskArbitration或其他框架在macOS上获取磁盘类型(SSD、HDD、光盘)_Swift_Macos_Diskarbitration - Fatal编程技术网

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

Swift 如何使用DiskArbitration或其他框架在macOS上获取磁盘类型(SSD、HDD、光盘),swift,macos,diskarbitration,Swift,Macos,Diskarbitration,我正试图弄清楚如何使用Swift在macOS上获得一些额外的磁盘属性。我对磁盘的类型特别感兴趣(如SSD、HDD、光盘) 我使用以下代码获取已装入卷的列表: FileManager.default.mountedVolumeURLs(includingResourceValuesForKeys: nil) 然后,我迭代所有卷,并使用属性键获取其他属性,如总磁盘空间: for volumeUrl in mountedVolumeURLs { if let values = try? volu

我正试图弄清楚如何使用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仅用于卸载/装载卷)


是否可以在macOS上使用(公共)框架获取此信息?

您非常接近,在
DiskArbitration
中有一个API
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 > /COD>中的IORIGRIGE来确定。

谢谢,这应该是一个很好的起点。我们如何才能获得C++中的所有卷URL?
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)
            }
        }
    }
}