2011-07-28 24 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が見つからないときにこれを行うことができます。

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

Hii Jethro ,,私は上記のコードを試したが、まだそれはスローされません例外、usbが配置されていません。 – krikk

+0

@krikk、私の更新答えをご覧ください。 – Jethro

+0

多くのおかげでボス、それは私の間違いだった、didntは適切なループに入れて – krikk

0

を発見された場合は、USBスティックを削除したとして、デバイスがさえ記載されているといないされていないので、おそらくそれは例外にならないtrueを返します例外が発生します。

なぜUSBスティックが差し込まれていない場合でも例外を生成したいのですか?

また、キャッチ定義の特定の例外を単純な0​​オブジェクトに置き換えたほうが、最終的にはより良い運を得ることができますが、これは問題ではないと思います。削除されたデバイスのリストを削除します。

+0

回答Davide – krikk

関連する問題