используя С#, как я могу извлечь информацию о жестких дисках, присутствующих на локальной машине

Я хочу получить такие данные, как размер / емкость, серийный номер, номер модели, секторы головок, производитель и, возможно, данные SMART.


person AndyM    schedule 24.10.2008    source источник


Ответы (4)


Вы можете использовать вызовы WMI для доступа к информации о жестких дисках.

//Требуется использование System.Management; & Справочник по System.Management.dll

ManagementObject disk = new ManagementObject("win32_logicaldisk.deviceid=\"c:\""); 
disk.Get(); 
Console.WriteLine("Logical Disk Size = " + disk["Size"] + " bytes"); 
Console.WriteLine("Logical Disk FreeSpace = " + disk["FreeSpace"] + "bytes");
person Eoin Campbell    schedule 24.10.2008

Вы должны использовать пространство имен System.Management:

System.Management.ManagementObjectSearcher ms =
    new System.Management.ManagementObjectSearcher("SELECT * FROM Win32_DiskDrive");
foreach (ManagementObject mo in ms.Get())
{
    System.Console.Write(mo["Model");
}

Подробнее о членах класса Win32_DiskDrive см.:

http://msdn.microsoft.com/en-us/library/aa394132(VS.85).aspx

person Tamas Czinege    schedule 24.10.2008

Самый простой способ — использовать WMI для получения необходимой информации. Взгляните на документацию для Win32___DiskDrive в MSDN, который содержит множество стандартных свойств диска. Вы также можете попробовать использовать класс WMI MSStorageDriver_ATAPISmartData, для которого я не могу найти никаких документов в данный момент, но должен иметь все данные SMART, которые вы ищете. Вот некоторый базовый пример кода для перечисления всех дисков и получения их свойств:

ManagementClass driveClass = new ManagementClass("Win32_DiskDrive");
ManagementObjectCollection drives = driveClass.GetInstances();
foreach (ManagementObject drive in drives) 
{ 
    foreach (PropertyData property in drive.Properties)
    {
        Console.WriteLine("Property: {0}, Value: {1}", property.Name, property.Value);        
    }
    Console.WriteLine();
}
person Stu Mackellar    schedule 24.10.2008
comment
есть идеи, можно ли проверить скорость чтения/записи с помощью тестового файла с помощью WMI? - person Lyuben Todorov; 23.03.2012

Вы можете использовать WMI, чтобы получить большую часть информации, которую вы хотите, и есть введение в WMI здесь.

person jmcd    schedule 24.10.2008