gpt4 book ai didi

swift - 如何在 Swift 中获取磁盘标识符

转载 作者:搜寻专家 更新时间:2023-10-31 22:47:06 24 4
gpt4 key购买 nike

我想找到附加驱动器的标识符 - 如终端命令 diskutil list 所示

   #:                       TYPE NAME                    SIZE       IDENTIFIER
0: GUID_partition_scheme *1.0 TB disk0
1: EFI EFI 209.7 MB disk0s1
2: Apple_HFS SSHD OSX 511.7 GB disk0s2
3: Apple_Boot Recovery HD 650.0 MB disk0s3
4: Apple_HFS SSHD OSX NEW 511.0 GB disk0s4
5: Apple_Boot Recovery HD 650.0 MB disk0s5

到目前为止,我已经设法编写了这段代码:

var volume_stack = [NSURL]()

volume_stack = NSFileManager.defaultManager().mountedVolumeURLsIncludingResourceValuesForKeys([NSURLVolumeNameKey, NSURLVolumeIdentifierKey], options: [])!
for disk: NSURL in volume_stack {
do {
var info: Dictionary = [String : AnyObject]()
info = try disk.resourceValuesForKeys([NSURLVolumeIdentifierKey])
for (key, value) in info {
var s_value = String(data: value as! NSData, encoding: NSUTF8StringEncoding)
print("key: \(key) value: \(s_value)")
}
}
catch {
print ("ERROR")
}
}

但是输出是:

key: NSURLVolumeIdentifierKey value: Optional("gEd\0\0\0\0\0")
key: NSURLVolumeIdentifierKey value: nil
key: NSURLVolumeIdentifierKey value: nil
key: NSURLVolumeIdentifierKey value: Optional("sHg\0\0\0\0\0")

ivar value 而不是 s_value 的日志给出

key: NSURLVolumeIdentifierKey value: <67456400 00000000>
key: NSURLVolumeIdentifierKey value: <c6236500 00000000>
key: NSURLVolumeIdentifierKey value: <69986600 00000000>
key: NSURLVolumeIdentifierKey value: <73486700 00000000>

据我所知,它是 NSData。为写得不好的代码道歉,但这是我的第一个 Swift 应用程序,我一直在兜圈子,所以它变得有点简单。有没有办法获取在标识符列中作为 String 列出的内容?

最佳答案

使用DiskArbitration.framework

At a high level, you can use the Disk Arbitration framework to:

  • Receive notification of disk-related events (disk ejection, forexample) and participate in the arbitration process (preventing diskejection, for example).
  • Obtain information about disks and manipulatedisks (requesting that a disk be ejected, for example).

首先使用 DASessionCreate 创建全局 session ,然后使用 DADiskCreateFromVolumePath 为每个安装的卷创建磁盘引用,并使用 DADiskGetBSDName< 获取 BSD 名称(标识符)/。将 C 字符串转换为 String 就完成了。

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),
let bsdName = DADiskGetBSDName(disk) {
let bsdString = String(cString : bsdName)
print(volumeURL.path, bsdString)
}
}
}

另一种合适的方法是解析 IORegistry。

关于swift - 如何在 Swift 中获取磁盘标识符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35468330/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com