C#中的USB驱动器删除代码

时间:2011-07-28 10:53:34

标签: c#

当我在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());           
    }

2 个答案:

答案 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定义中的特定异常,但我不认为这是问题所在,正如我上面所说的那样,可能不会抛出任何异常只是因为你不再列出被删除的设备。