如何确定驱动器是否是外置驱动器
问题描述:
如何确定驱动器是否是通过USB插入的外置驱动器?我检查了DriveInfo.DriveType,但通过USB插入我的1TB外置驱动器,它显示为固定驱动器。如何确定驱动器是否是外置驱动器
想法?
答
基于从弗洛伊德粉红我用这个link评论。这使我可以确定设备是否是外部设备。
public bool IsProjectOnExternalDisk(string driveLetter)
{
bool retVal = false;
driveLetter = driveLetter.TrimEnd('\\');
// browse all USB WMI physical disks
foreach (ManagementObject drive in new ManagementObjectSearcher("select DeviceID, MediaType,InterfaceType from Win32_DiskDrive").Get())
{
// associate physical disks with partitions
ManagementObjectCollection partitionCollection = new ManagementObjectSearcher(String.Format("associators of {{Win32_DiskDrive.DeviceID='{0}'}} " + "where AssocClass = Win32_DiskDriveToDiskPartition", drive["DeviceID"])).Get();
foreach (ManagementObject partition in partitionCollection)
{
if (partition != null)
{
// associate partitions with logical disks (drive letter volumes)
ManagementObjectCollection logicalCollection = new ManagementObjectSearcher(String.Format("associators of {{Win32_DiskPartition.DeviceID='{0}'}} " + "where AssocClass= Win32_LogicalDiskToPartition", partition["DeviceID"])).Get();
foreach (ManagementObject logical in logicalCollection)
{
if (logical != null)
{
// finally find the logical disk entry
ManagementObjectCollection.ManagementObjectEnumerator volumeEnumerator = new ManagementObjectSearcher(String.Format("select DeviceID from Win32_LogicalDisk " + "where Name='{0}'", logical["Name"])).Get().GetEnumerator();
volumeEnumerator.MoveNext();
ManagementObject volume = (ManagementObject)volumeEnumerator.Current;
if (driveLetter.ToLowerInvariant().Equals(volume["DeviceID"].ToString().ToLowerInvariant()) &&
(drive["MediaType"].ToString().ToLowerInvariant().Contains("external") || drive["InterfaceType"].ToString().ToLowerInvariant().Contains("usb")))
{
retVal = true;
break;
}
}
}
}
}
}
return retVal;
}
使用WMI Select * from Win32_LogicalDisk
在Royi纳米尔的答案,并DriveInfo.DriveType
显示我的外部类型“本地磁盘”我不能用它来确定驱动器是否是外部的。
答
你可以使用WMI 与
Select * from Win32_LogicalDisk
你有
Select Case .DriveType
Case 0
strDriveType = "Unknown"
Case 1
strDriveType = "No Root Directory"
Case 2
strDriveType = "Removable Disk"
Case 3
strDriveType = "Local Disk"
Case 4
strDriveType = "Network Drive"
Case 5
strDriveType = "Compact Disc"
Case 6
strDriveType = "RAM Disk"
End Select
+0
这与DriveInfo.DriveType具有相同的结果,我的外部USB驱动器显示为DriveType 3或“本地磁盘” – Web 2012-03-27 16:07:14
谷歌搜索带我到这里 - http://social.msdn.microsoft.com/Forums/en-US/netfxbcl/thread/a3d4dbc7-c63a-46d5-a191-c73a4fca233a/ – 2012-03-27 14:50:12
你不能。通常情况下,驱动器的物理位置不能从物理接口获得。我有带外部SATA驱动器和内部USB驱动器的系统。也许未来的驱动器将包括GPS。 – HABO 2012-03-27 14:55:50