Я пытаюсь распознать типы дисководов путем обхода DriveInfo.GetDrives()
результата.
Но и для USB, и для гибких дисков я получаю одинаковое значение DriveType.Removable
.
Как я могу их различить?
Я пытаюсь распознать типы дисководов путем обхода DriveInfo.GetDrives()
результата.
Но и для USB, и для гибких дисков я получаю одинаковое значение DriveType.Removable
.
Как я могу их различить?
Вы можете использовать WMI (инструментарий управления Windows), чтобы получить больше, чем просто то, что содержится в классе DriveInfo. В этом случае вы можете получить тип интерфейса, который будет «USB» для USB-накопителей.
Пример кода ниже. Вам нужно добавить ссылку на System.Management
.
using System.Management;
try
{
ManagementObjectSearcher searcher =
new ManagementObjectSearcher("root\\CIMV2",
"SELECT * FROM Win32_DiskDrive");
foreach(ManagementObject queryObj in searcher.Get())
{
foreach(ManagementObject o in queryObj.GetRelated("Win32_DiskPartition"))
{
foreach(ManagementBaseObject b in o.GetRelated("Win32_LogicalDisk"))
{
Debug.WriteLine(" #Name: {0}", b["Name"]);
}
}
// One of: USB, IDE
Debug.WriteLine("Interface: {0}", queryObj["InterfaceType"]);
Debug.WriteLine("--------------------------------------------");
}
}
catch (ManagementException f)
{
Debug.WriteLine(f.StackTrace);
}
Для справки: эта страница MSDN документирует полный список доступных свойств (поскольку у вас нет автозаполнения для этого).
Win32_DiskDrive
на Win32_LogicalDisk
или Win32_MappedLogicalDisk
и посмотреть, пригодятся ли вам эти данные; см. эту ссылку.
- person ashes999; 12.05.2014
Привод компакт-дисков и дисковод для гибких дисков не готовы, поэтому вы можете попробовать следующее:
foreach (var dr in DriveInfo.GetDrives())
{
if (dr.IsReady == true)
{
Console.WriteLine(string.Format("name : {0} type : {1}", dr, dr.DriveType));
}
}
Это простой способ отличить USB-устройства от гибких дисков.