2012-03-27 105 views
3

如何確定驅動器是否是通過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

回答

4

基於從弗洛伊德粉紅我用這個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顯示我的外部類型「本地磁盤」我不能用它來確定驅動器是否是外部的。

4

你可以使用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