2011-07-28 18 views
1

當我在c#中使用此函數時,它能夠獲取驅動器盤符,但是當我移除USB盤並測試此功能時,它不會進入異常。C#中的USB驅動器清除代碼#

那麼有人可以幫我在功能代碼中出錯的地方嗎?

 public void GetDriveLetter() 
    { 

     try 
     { 

      ManagementObjectSearcher searcher = new ManagementObjectSearcher("root\\CIMV2", "SELECT * FROM Win32_DiskDrive where InterfaceType='USB'"); 

      foreach (ManagementObject queryObj in searcher.Get()) 
      { 
       foreach (ManagementObject b in queryObj.GetRelated("Win32_DiskPartition")) 
       { 
        foreach (ManagementBaseObject c in b.GetRelated("Win32_LogicalDisk")) 
        { 
         // writer.WriteLine("{0}" + "\\", c["Name"].ToString()); // here it will print drive letter 
         usbDriveLetter = String.Format("{0}" + "\\", c["Name"].ToString()); 
        } 
       } 

      } 

     } 
     catch (ManagementException e) 
     { 
      MessageBox.Show(e.StackTrace); 
     } 
     //CombinedPath = System.IO.Path.Combine(usbDriveLetter.Trim(), path2.Trim());   
    } 

回答

1

你習慣的方法拋出一個Exception如無物是打破。如果你想拋出和Exception沒有找到USB時,你可以做到這一點。

if (searcher.Get().Count == 0) 
    throw new ApplicationException("No Usb drives connected"); 

更新:如果任何USB設備被發現

ManagementObjectSearcher searcher = new ManagementObjectSearcher("root\\CIMV2", "SELECT * FROM Win32_DiskDrive where InterfaceType='USB'"); 

     return (from ManagementObject queryObj in searcher.Get() 
       from ManagementObject b in queryObj.GetRelated("Win32_DiskPartition") 
       select b).Select(b => b.GetRelated("Win32_LogicalDisk").Count > 0).FirstOrDefault(); 
+0

嗨Jethro ,,非常感謝您的快速回復,我嘗試了上面的代碼,但仍然沒有拋出和異常,當USB沒有放置。 – krikk

+0

@krikk,請參閱我的更新回答。 – Jethro

+0

非常感謝老闆,這是我的錯誤,沒有把它放在正確的循環中 – krikk

0

也許它並沒有去例外,因爲你已經刪除了USB棒將返回true,該設備甚至沒有上市也沒有發生異常。

爲什麼你想要生成一個異常的情況下,如果沒有插入USB棒?

也,你最終可能有更好的運氣與簡單Exception對象替換在catch定義特定的例外,但我不認爲這是問題,正如我上面大概也不例外說是因爲你不被簡單地拋出^不再列出移除的設備。

+0

Thanks Davide for the Reply – krikk