如何确定驱动器是否为外部驱动器

如何确定驱动器是否是通过USB插入的外置驱动器? 我检查了DriveInfo.DriveType但是通过usb插入了我的1TB外置驱动器,它显示为固定驱动器。

想法?

你可以使用WMI

Select * from Win32_LogicalDisk 

http://www.jpsoftwaretech.com/vba/using-wmi-services-in-vba/drive-information-local-network-mapped-drives/

你有

  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 

基于Floyd Pink的评论我使用了这个链接 。 这允许我确定设备是否是外部设备。

 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 Namir的答案中, DriveInfo.DriveType将我的外部类型显示为“本地磁盘” ,我不能用它来确定驱动器是否是外部的。