首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在C#中检查硬盘是否为固态硬盘而不在硬盘上写入任何文件的最简单方法是什么?

在C#中检查硬盘是否为固态硬盘而不在硬盘上写入任何文件的最简单方法是什么?
EN

Stack Overflow用户
提问于 2012-12-05 23:23:02
回答 2查看 9.5K关注 0票数 17

如果硬盘是固态硬盘(固态驱动器),我需要检查C#,是否没有寻道损失?我使用:

代码语言:javascript
运行
复制
    ManagementClass driveClass = new ManagementClass("Win32_DiskDrive");
    ManagementObjectCollection drives = driveClass.GetInstances(); 

但是它只给出了在属性中包含SSD的字符串,我不能依赖它?

我需要一种直接的方法来检查吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-12-06 00:21:42

WMI将不能轻易地确定这一点。这里有一个解决方案,它基于Windows7用来确定磁盘是否为固态硬盘的相同算法(更多算法在这里:Windows 7 Enhancements for Solid-State Drives,第8页,也在这里:Windows 7 Disk Defragmenter User Interface Overview):Tell whether SSD or not in C#

引述自MSDN博客:

磁盘碎片整理程序查看通过ATA命令直接查询设备的结果。碎片整理程序发出IOCTL_ATA_PASS_THROUGH请求并检查IDENTIFY_DEVICE_DATA结构。如果NomimalMediaRotationRate设置为1,则此磁盘被视为固态硬盘。最新的SSD将通过设置字217 (用于将标称介质旋转速率报告为1)来响应该命令。单词217是在2007年的ATA8-ACS规范中引入的。

票数 11
EN

Stack Overflow用户

发布于 2020-03-20 16:07:57

这将为您提供Win10上的结果

代码语言:javascript
运行
复制
ManagementScope scope = new ManagementScope(@"\\.\root\microsoft\windows\storage");
ManagementObjectSearcher searcher = new ManagementObjectSearcher("SELECT * FROM MSFT_PhysicalDisk");
string type = "";
scope.Connect();
searcher.Scope = scope;

foreach (ManagementObject queryObj in searcher.Get())
{       
    switch (Convert.ToInt16(queryObj["MediaType"]))
    {
        case 1:
            type = "Unspecified";
            break;

        case 3:
            type = "HDD";
            break;

        case 4:
            type = "SSD";
            break;

        case 5:
            type = "SCM";
            break;

        default:
            type = "Unspecified";
            break;
    }
}
searcher.Dispose();

附注:字符串类型是最后一个驱动器,请更改为数组以获取所有驱动器的类型

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13726522

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档