C# getdrives 类型固定但没有 USB 硬盘?

Posted

技术标签:

【中文标题】C# getdrives 类型固定但没有 USB 硬盘?【英文标题】:C# getdrives with type fixed but without usb harddisks? 【发布时间】:2010-12-12 13:34:10 【问题描述】:

我想检索系统中的固定磁盘列表。但是 C#s GetDrives 固定驱动器包括插入式 USB 硬盘。

知道如何检测到固定驱动器不是 USB 硬盘,反之亦然?

【问题讨论】:

抱歉,网络中断,请查看以下链接... 【参考方案1】:

解决方案来自How to get serial number of USB-Stick in C#:

 //import the System.Management namespace at the top in your "using" statement.
 ManagementObjectSearch theSearcher = new ManagementObjectSearcher(
      "SELECT * FROM Win32_DiskDrive WHERE InterfaceType='USB'");

【讨论】:

正确,虽然这将列出棒和驱动器,并且快速浏览属性并没有发现找到驱动器号的简单方法。 显然以法莲已经有了这些。此解决方案旨在展示如何过滤掉 USB 驱动器。这就是为什么查询被写成InterfaceType='USB',以及为什么包含棍子并不重要。 无法匹配 ManagementObjects 和 DriveInfo 对象,因为查询不返回驱动器号。【参考方案2】:

使用 DriveType 检测驱动器的类型:

using System.IO;

DriveInfo[] allDrives = DriveInfo.GetDrives();
foreach (DriveInfo d in allDrives)

  if (d.IsReady && d.DriveType == DriveType.Fixed)
  
    // This is the drive you want...
  

DriveInfo Class

编辑1:

检查以下链接: How do I detected whether a hard drive is connected via USB?

【讨论】:

但是 DriveType.Removable 只是 USB 记忆棒而不是 USB 硬盘。来自 Docu:驱动器是可移动存储设备,例如软盘驱动器或 USB 闪存驱动器。 USB 硬盘属于固定类型,这就是问题所在! 有可能。您可以在底部查看我的解决方案。【参考方案3】:

这里你可以得到USB硬盘列表。

//Add Reference System.Management and use namespace at the top of the code.
ManagementObjectSearcher searcher = new ManagementObjectSearcher("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"))
                 
                    Console.WriteLine(String.Format("0" + "\\", c["Name"].ToString())); // here it will print USB drive letter
                
            

        

在这里你可以得到所有固定驱动器的列表(系统和USB硬盘):

        DriveInfo[] allDrives = DriveInfo.GetDrives(); 

        foreach (DriveInfo d in allDrives)
        
            if (d.IsReady == true && d.DriveType == DriveType.Fixed)
            
                Console.WriteLine("Drive 0", d.Name);
                Console.WriteLine("  Drive type: 0", d.DriveType);   
                       
        

如果你比较它们,那么你可以检索系统中的固定磁盘列表,但没有USB硬盘。

【讨论】:

【参考方案4】:

将此 MSDN 链接用于单个解决方案(包括查找驱动器号): WMI Tasks: Disks and File Systems

【讨论】:

以上是关于C# getdrives 类型固定但没有 USB 硬盘?的主要内容,如果未能解决你的问题,请参考以下文章

在 C# 中设置 USB 键盘状态

在 C# 中禁用 USB 端口访问智能手机内存(无组策略)

tomcat 6.0.35 获取尝试失败!!!清除挂起的获取。 java.sql.DriverManager.getDriver(DriverManager.java:243) 中没有合适的驱动程序

linux下多个usb设备固定名称方法

驱动器-目录-文件

如果将笔式驱动器插入 USB 端口,如何使用 c# 检测?