当我在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());
}
答案 0 :(得分:1)
你方法不会抛出一个Exception
因为什么都没有破坏。如果你想在没有找到usb时抛出Exception
那么你可以这样做。
if (searcher.Get().Count == 0)
throw new ApplicationException("No Usb drives connected");
更新:如果找到任何USB设备,将返回true
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();
答案 1 :(得分:0)
可能它不会发生异常,因为当你移除了USB记忆棒时,设备甚至没有列出,也不会发生异常。
为什么要在没有插入usb棒的情况下完全生成异常?
另外,你最终可以用一个简单的Exception
对象替换catch定义中的特定异常,但我不认为这是问题所在,正如我上面所说的那样,可能不会抛出任何异常只是因为你不再列出被删除的设备。