我需要检查C#,如果硬盘是SSD(固态硬盘),没有寻求惩罚? 我用过:
ManagementClass driveClass = new ManagementClass("Win32_DiskDrive");
ManagementObjectCollection drives = driveClass.GetInstances();
但是它只提供了属性中包含SSD的字符串,我不能依赖它?
我需要直接检查一下吗?
答案 0 :(得分:9)
WMI无法轻易确定这一点。这里有一个解决方案,它基于Windows 7用于确定磁盘是否为SSD的相同算法(更多关于此处的算法:Windows 7 Enhancements for Solid-State Drives,第8页以及此处:Windows 7 Disk Defragmenter User Interface Overview):{{3 }}
来自MSDN博客的引用:
磁盘碎片整理程序查看直接查询设备的结果 通过ATA IDENTIFY DEVICE命令。碎片整理问题 IOCTL_ATA_PASS_THROUGH请求并检查IDENTIFY_DEVICE_DATA 结构体。如果NomimalMediaRotationRate设置为1,则此磁盘为 被认为是SSD。最新的SSD将响应命令 设置字217(用于报告名义媒体) 转速为1)。 217这个词是在2007年引入的 ATA8-ACS规范。
答案 1 :(得分:3)
这将为您提供Win10上的结果
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();
P.s。字符串类型是最后一个驱动器,请更改为数组以获取所有驱动器