結果をループしてドライブの種類を認識しようとしていますDriveInfo.GetDrives()
。
しかし、USB とフロッピーの両方で同じDriveType.Removable
値が得られます。
それらをどのように区別できますか?
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ページには、アクセス可能なプロパティの完全なリストが記載されています(これではオートコンプリートが取得されないため)。
CD ドライブとフロッピー ドライブの準備が整っていないため、次の手順を試してください。
foreach (var dr in DriveInfo.GetDrives())
{
if (dr.IsReady == true)
{
Console.WriteLine(string.Format("name : {0} type : {1}", dr, dr.DriveType));
}
}
これは、USB デバイスとフロッピー デバイスを簡単に区別する方法です。