如何在 macOS 上区分 USB 硬盘和 SSD 与 USB 闪存盘/笔式驱动器

2024-03-20

代码如何能够一方面区分外部 USB 硬盘驱动器和固态驱动器,另一方面区分 USB 记忆棒?

我不熟悉 macOS API(或系统调用、中断、消息传递和其他内容),但我猜它会在 I/O Kit 或磁盘仲裁中?

在终端命令行上您可以使用system_profiler SPUSBDataType并查看“可移动媒体”下列出的此信息。


我以前从未编写过 macOS 或 Swift 代码。我学到的知识足以完成这个概念验证。它只进行了双向概括,如我的问题:可移动和/或可弹出媒体与不可移动不可弹出媒体。 DMG 与 U 盘和 SD 卡混为一谈。光盘和软盘当然也是如此。我不知道是否存在一种存储类型,其中只有“可移动”和“可弹出”之一为真,但不能同时为两者......

import Cocoa
import 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),
            let bsdName = DADiskGetBSDName(disk) {
            let bsdString = String(cString : bsdName)
            print(volumeURL.path, bsdString)
            
            if let descDict = DADiskCopyDescription(disk) as? [String: CFTypeRef] {
                let removable : Bool, ejectable : Bool
                if let val = descDict["DAMediaRemovable"] as? Bool {
                    removable = val
                    if let val = descDict["DAMediaEjectable"] as? Bool {
                        ejectable = val

                        var type = ""
                        
                        type += removable || ejectable ? "USB stick, SD card, etc" : "hard drive, SSD, etc";
                        
                        type += " ("
                        
                        type += removable ? "" : "not "
                        type += "removable"
                        type += ", "
                        type += ejectable ? "" : "not "
                        type += "ejectable"
                        
                        type += ")"

                        print(" ", type)
                    }
                }
            }
            print("\n")
        }
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 macOS 上区分 USB 硬盘和 SSD 与 USB 闪存盘/笔式驱动器 的相关文章

随机推荐

  • 我刚刚部署了我的 Vite React 站点,但我的图标/图像没有部署

    I deployed my Vite React site on Netlify but my skill icons aren t rendered Here s the site https mjshubham21 portfolio
  • Swift:验证用户名输入

    在开发 Swift 应用程序时 我有一个由用户填写的表单 我希望用户选择自己的用户名 我想要对用户名的唯一限制是 没有特殊字符 例如 只允许使用字母 下划线和数字 长度最多应为 18 个字符 最少为 7 个字符 在哪里可以找到验证输入字符串
  • 由于导入量角器而无法加载 config.ts

    我正在尝试启动一个新的量角器项目来测试有角度的网站 我全局安装了node js typescript protractor 和jasmine 我转到项目文件夹并执行webdriver manager update 那我就做webdriver
  • Apache CXF 生成数字而不是字符串

    如果一个字符串看起来像一个数字 例如 111 CXF 不将其作为字符串返回 而是作为数字返回
  • Apache Spark 中的 CPU 使用率是否受到限制?

    我最近发现 在 UDF 中添加并行计算 例如使用并行集合 可以显着提高性能 即使在运行 Spark 时也是如此local 1 模式或使用具有 1 个执行器和 1 个核心的 Yarn E g in local 1 模式下 Spark Jobs
  • 弧形边框 CSS 实现

    最近我在Dribbble上看到一个设计理念 对我很有启发 特别是顶部和底部带有弯曲 U 形的侧边栏给了我关于制作选项卡堆栈或流程图的很好的想法 我可以用 alpha 图像来制作它 但使用纯 CSS 会更好 而且我不介意 CSS3 不过我对
  • 快速从模数和指数创建 SecKey

    我尝试制作自己的 SecKey exponent let exponent 10001 modulus let modulus D6250B831F82EC984513922E797283E4D3879E1F0AD52364EBDA5A56
  • SQL Server:什么是 ODBC 规范函数?

    什么是 ODBC 规范函数 例如 fn NOW 基本上 这些规范函数是微软承诺将适用于其提供商支持的所有类型的数据源的一组函数 这意味着您不必根据实际使用的数据提供程序来区分您的代码 这些函数不是基本 SQL 的一部分 因此您应该尝试找到可
  • 用于输入金额的 UITextField

    我正在开发一个销售点应用程序 所以我想 假设用户输入100000但我希望它自动显示100 000 and 1000000 become 1 000 000 第二个问题是 我不希望用户能够输入 他们自己 第三个问题是 既然这是钱 我们不能让用
  • Docker maven Fabric8 插件(在 Windows 上):构建映像会出现不兼容问题?

    我想通过 Maven 从 Springboot 项目构建 Docker 镜像 我运行 mvn clean package docker build 问题 ERROR Failed to execute goal io fabric8 doc
  • Google Scholar 是否有可供我们在研究应用程序中使用的 API?

    我正在开展一个研究出版物和合作项目 其中有文献检索功能 Google Scholar 似乎可以工作 因为它是一个开源工具 但是当我研究 Google Scholar 时 我找不到任何有关它具有 API 的信息 有谷歌学术的 API 吗 没有
  • 使用 ASP.NET Core 进行 Ws-Federation 身份验证

    我正在将 ASP NET 应用程序迁移到 ASP NET Core 上 但遇到了 Ws Federation 身份验证问题 没有 Ws Federation https www nuget org packages q Microsoft
  • 使用 Google Apps 脚本:如何转换/导出云端硬盘文件?

    我想使用 Google Apps 脚本将本机 Google 电子表格 文档 绘图 演示文稿文件导出到同一文件夹中的另一种格式 我已启用高级驾驶服务 https developers google com apps script advanc
  • iOS XMPP群聊实现

    我正在尝试使用 robbiehanson XMPPframework 创建聊天室 由于我没有得到任何示例代码或文档 我自己尝试发起一个聊天室 如下 XMPPRoomMemoryStorage rosterstorage XMPPRoomMe
  • javascript美元符号变量不起作用

    我的 WordPress 中有以下代码 function var header div header window bind scroll resize function if window scrollTop gt 30 div head
  • JavaScript中有“createObject”吗?

    VBScript中有一个名为CreateObject的函数 可以通过网页在客户端运行 我以前像这样使用过它 Set icaObj CreateObject Citrix ICAClient CitrixVersion icaObj Clie
  • 如何在 Mac 上使用 Pipenv?

    当通过 pip 安装它时 pip install pipenv 在 zsh shell 上找不到命令pipenv 如果通过安装brew brew install pipenv 然后运行pipenv shell 出现错误 Loading en
  • JRuby Heroku 宝石

    是否可以将 Heroku 客户端与 JRuby 一起使用 我已经成功安装了heroku gem 和所有依赖项 但我无法登录 PS D Projects myproject gt heroku login Enter your Heroku
  • 在 Spark 中将简单的一行字符串转换为 RDD

    我有一条简单的线 line Hello world 我想将其转换为只有一个元素的 RDD 我努力了 sc parallelize line 但它得到 sc parallelize line collect H e l l o w o r l
  • 如何在 macOS 上区分 USB 硬盘和 SSD 与 USB 闪存盘/笔式驱动器

    代码如何能够一方面区分外部 USB 硬盘驱动器和固态驱动器 另一方面区分 USB 记忆棒 我不熟悉 macOS API 或系统调用 中断 消息传递和其他内容 但我猜它会在 I O Kit 或磁盘仲裁中 在终端命令行上您可以使用system