Как отличить USB-устройство от гибкого диска? - PullRequest
4 голосов
/ 17 июня 2010

Я пытаюсь распознать типы дисков, зацикливая результат DriveInfo.GetDrives().
Но как для USB, так и для дискет я получаю одинаковое значение DriveType.Removable.

Как я могу различить их?

Ответы [ 2 ]

7 голосов
/ 23 декабря 2010

Вы можете использовать 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 документирует полный список доступных свойств (поскольку вы не получаете автозаполнение при этом).

1 голос
/ 03 апреля 2016

CD-дисковод и дисковод гибких дисков не готовы, поэтому вы можете попробовать это:

foreach (var dr in DriveInfo.GetDrives())
{
    if (dr.IsReady == true)
    {
        Console.WriteLine(string.Format("name : {0}   type : {1}", dr, dr.DriveType));
    }
}

Это простой способ различить USB и дискеты

...