如何区分 C# 4.0 中的硬盘型号
Posted
技术标签:
【中文标题】如何区分 C# 4.0 中的硬盘型号【英文标题】:How to Differentiate Hard Drive models in C# 4.0 【发布时间】:2012-07-05 09:59:28 【问题描述】:我目前正在使用 WMI 查询来返回连接到计算机的所有硬盘的制造商名称。不幸的是,这并没有专门返回“Intel”或“Western Digital”,所以我使用 string.Contains() 来比较制造商是谁。 我的简单代码是:
//*** Declare Management Class
ManagementClass clsMgtClass = new ManagementClass("Win32_DiskDrive");
ManagementObjectCollection colMgtObjCol = clsMgtClass.GetInstances();
//*** Loop Over Objects
foreach (ManagementObject objMgtObj in colMgtObjCol)
MessageBox.Show(objMgtObj.Properties["Manufacturer"].Value.ToString());
这可能在 60% 的情况下有效,因为它依赖 WMI 来返回整个名称。因此,例如,我的硬盘驱动器返回为“SanDisk SSDSDX240GG25 ATA Device”,这很好,因为我可以很容易地找到“SanDisk”。同样,西部数据的产品会显示为“WD3000USB”或类似的东西,我可以清楚地找到“WD”。但是在另一台使用希捷硬盘的计算机上,它有 SE1000GXB 等等,并且没有任何制造商的真实指示。所以我的问题是,我怎样才能可靠地找到硬盘制造商,并且能够轻松区分制造商,而不必费力通过谷歌脚本或数据库查询型号。谢谢。 另一个编辑:使用成员“Caption”,它将返回上面的示例。使用成员“制造商”将简单地返回“(标准磁盘驱动器)”
【问题讨论】:
hardforum.com/showthread.php?t=921544 有帮助,我上面提到的型号是 ST31000340AS,它适合这个前缀计算器,但它不是最优雅的解决方案。任何建议将不胜感激 我找不到 wmi 的替代品来获得格式良好的人类可读的磁盘驱动器制造商名称。您可以在网络上运行脚本,然后计算唯一的制造商名称吗?还是我错过了重点.... 我可以 jJack,但这只是编译一个我可以在 Internet 上轻松完成的 HDD ID 列表。经过一段时间的搜索,似乎唯一的解决方案是找出可以区分制造商的独特模式或组合。 这就是它们在设备管理器中的显示方式,所以我不认为你会得到更好的东西。设备管理器还将制造商显示为“(标准磁盘驱动器)”。 也许可以使用正则表达式来查找首字母缩写词和缩写模式。或其他一些方法来测量 wmi 返回的内容与“友好”名称之间的距离。存在此类问题的库,您愿意探索吗? 【参考方案1】:ST-希捷
您可以从现在合并的每个硬盘公司下载一个型号前缀列表,并根据型号制作一个表格,如果您愿意,该表格也可以包含实际容量。
型号中通常包含足够的信息,1986 年之后磁盘设备上的序列号通常包含型号信息。
归根结底,您可能必须创建一个表格,以便以人类友好的方式查找信息。
http://www.robvanderwoude.com/files/listhdds_2k.txt
这将帮助您了解合并的内容 http://en.wikipedia.org/wiki/List_of_defunct_hard_disk_manufacturers
这是一个适用于 windows 的批处理文件 http://www.robvanderwoude.com/sourcecode.php?src=listhdds_2k
【讨论】:
以上是关于如何区分 C# 4.0 中的硬盘型号的主要内容,如果未能解决你的问题,请参考以下文章