4

結果をループしてドライブの種類を認識しようとしていますDriveInfo.GetDrives()
しかし、USB とフロッピーの両方で同じDriveType.Removable値が得られます。

それらをどのように区別できますか?

4

2 に答える 2

7

WMI(Windows Management Instrumentation)を使用して、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ページには、アクセス可能なプロパティの完全なリストが記載されています(これではオートコンプリートが取得されないため)。

于 2010-12-23T15:50:03.097 に答える
1

CD ドライブとフロッピー ドライブの準備が整っていないため、次の手順を試してください。

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

これは、USB デバイスとフロッピー デバイスを簡単に区別する方法です。

于 2016-04-03T12:24:42.937 に答える