如何确定驱动器是否是外置驱动器

问题描述:

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

想法?

+1

谷歌搜索带我到这里 - http://social.msdn.microsoft.com/Forums/en-US/netfxbcl/thread/a3d4dbc7-c63a-46d5-a191-c73a4fca233a/ – 2012-03-27 14:50:12

+0

你不能。通常情况下,驱动器的物理位置不能从物理接口获得。我有带外部SATA驱动器和内部USB驱动器的系统。也许未来的驱动器将包括GPS。 – HABO 2012-03-27 14:55:50

基于从弗洛伊德粉红我用这个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 

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 
+0

这与DriveInfo.DriveType具有相同的结果,我的外部USB驱动器显示为DriveType 3或“本地磁盘” – Web 2012-03-27 16:07:14