USB驱动器移除代码在c#

本文关键字:代码 驱动器 USB | 更新日期: 2023-09-27 18:04:02

当我在c#中使用此函数时,它能够获得驱动器号,但是,当我删除u盘并测试此函数时,它不会转到异常。

所以有人可以帮助我在哪里我在功能代码出错?

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

USB驱动器移除代码在c#

你的方法不会抛出一个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();

可能它不去异常,因为你已经删除了USB棒,设备甚至没有列出,没有异常发生。

为什么要在u盘未插入的情况下生成异常?

同样,你最终可能会有更好的运气,用一个简单的Exception对象替换catch定义中的特定异常,但我不认为这是问题所在,正如我上面所说的,可能没有抛出异常仅仅是因为你不再列出被删除的设备。