如果硬盘是固态硬盘(固态驱动器),我需要检查C#,是否没有寻道损失?我使用:
ManagementClass driveClass = new ManagementClass("Win32_DiskDrive");
ManagementObjectCollection drives = driveClass.GetInstances();
但是它只给出了在属性中包含SSD的字符串,我不能依赖它?
我需要一种直接的方法来检查吗?
发布于 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规范中引入的。
发布于 2020-03-20 16:07:57
这将为您提供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();
附注:字符串类型是最后一个驱动器,请更改为数组以获取所有驱动器的类型
https://stackoverflow.com/questions/13726522
复制相似问题