如何区分USB设备和软盘驱动器?

4

我正在尝试通过循环 DriveInfo.GetDrives() 的结果来识别驱动器类型。
但是对于USB和软盘,我得到了相同的DriveType.Removable值。

我该如何区分它们?


4
为什么你需要这个?一个天真的尝试可以检查驱动器的大小。 - Henrik Gering
我需要这个是因为我的程序需要一个USB驱动器,并且我想要验证用户输入。仅检查大小是不够安全的,因为可能存在小容量的USB设备。谢谢。 - Break Point
重复的问题?https://dev59.com/DErSa4cB1Zd3GeqPW4GA - Goibniu
谢谢,看起来这是正确的解决方案。MediaType可以在没有WMI的情况下实现吗? - Break Point
人们还在使用软盘吗?o_O - user47589
我甚至不知道你现在还能买到软盘。 - NotMe
2个回答

7

你可以使用 WMI(Windows Management Instrumentation)获取比 DriveInfo 类更多的信息。在这种情况下,你可以获取接口类型,对于 USB 驱动器来说,它将为“USB”。

以下是示例代码。你需要添加对 System.Management 的引用。

using System.Management;

try
{
    ManagementObjectSearcher searcher =
        new ManagementObjectSearcher("root\\CIMV2",
        "SELECT * FROM Win32_DiskDrive");

    foreach(ManagementObject queryObj in searcher.Get())
    {
        foreach(ManagementObject o in queryObj.GetRelated("Win32_DiskPartition"))
        {
            foreach(ManagementBaseObject b in o.GetRelated("Win32_LogicalDisk"))
            {
                Debug.WriteLine("    #Name: {0}", b["Name"]);
            }
        }
        // One of: USB, IDE
        Debug.WriteLine("Interface: {0}", queryObj["InterfaceType"]);
        Debug.WriteLine("--------------------------------------------");
    }
}
catch (ManagementException f)
{
    Debug.WriteLine(f.StackTrace);
}

供参考,此 MSDN 页面列出了完整的可访问属性列表(因为您在此处无法获得自动完成)。


5
我认为在这里回复晚了没有必要道歉。这不是一个论坛,而且如果我没记错的话,回答未解决的问题是被鼓励的。 - Greg Buehler
我正在尝试利用它,但是 ManagementObjectSearcher 只返回固定驱动器,即使 DriveInfo.GetDrives 检测到其他驱动器,我仍然感到有些困惑。你能否推荐一个好的资源,以了解如何构建查询来检测其余驱动器? - Sean Duggan
@SeanDuggan 我建议你创建一个新问题来解决此问题。你所说的“检测到其他”具体指什么?有哪些非固定驱动器是你期望看到却没有出现的? - ashes999
我插入了一个USB驱动器和一个SD卡,以及一个固定驱动器和一个网络驱动器。DriveInfo.GetDrives可以找到所有四个驱动器。你引用的代码只获取固定驱动器和网络驱动器。 - Sean Duggan
没错,这绝对是一个新问题 - 这将为您带来更好的答案,因为我并不是WMI专家。您可以尝试使用Win32_LogicalDiskWin32_MappedLogicalDisk替换Win32_DiskDrive,看看这些数据是否对您更有用; 请参阅此链接 - ashes999

1
CD驱动器和软盘驱动器尚未准备好,您可以尝试以下操作:
foreach (var dr in DriveInfo.GetDrives())
{
    if (dr.IsReady == true)
    {
        Console.WriteLine(string.Format("name : {0}   type : {1}", dr, dr.DriveType));
    }
}

这是区分USB和软盘设备的简单方法。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接