C# 如何确定给定的驱动器号是本地驱动器、映射驱动器还是USB驱动器?

C# 如何确定给定的驱动器号是本地驱动器、映射驱动器还是USB驱动器?,c#,.net,path,usb,C#,.net,Path,Usb,给定驱动器的字母,如何确定它是什么类型的驱动器 例如,E:\是USB驱动器、网络驱动器还是本地硬盘驱动器。请查看的属性 System.IO.DriveInfo[] drives = System.IO.DriveInfo.GetDrives(); foreach (var drive in drives) { string driveName = drive.Name; // C:\, E:\, etc:\ System.IO.DriveType driveType = dri

给定驱动器的字母,如何确定它是什么类型的驱动器

例如,E:\是USB驱动器、网络驱动器还是本地硬盘驱动器。

请查看的属性

System.IO.DriveInfo[] drives = System.IO.DriveInfo.GetDrives();
foreach (var drive in drives)
{
    string driveName = drive.Name; // C:\, E:\, etc:\

    System.IO.DriveType driveType = drive.DriveType;
    switch (driveType)
    {
        case System.IO.DriveType.CDRom:
            break;
        case System.IO.DriveType.Fixed:
            // Local Drive
            break;
        case System.IO.DriveType.Network:
            // Mapped Drive
            break;
        case System.IO.DriveType.NoRootDirectory:
            break;
        case System.IO.DriveType.Ram:
            break;
        case System.IO.DriveType.Removable:
            // Usually a USB Drive
            break;
        case System.IO.DriveType.Unknown:
            break;
    }
}

看一看

仅供其他人参考,以下是我将GenericTypeTea的答案转化为:

/// <summary>
/// Gets the drive type of the given path.
/// </summary>
/// <param name="path">The path.</param>
/// <returns>DriveType of path</returns>
public static DriveType GetPathDriveType(string path)
{
    //OK, so UNC paths aren't 'drives', but this is still handy
    if(path.StartsWith(@"\\")) return DriveType.Network;  
    var info = 
          DriveInfo.GetDrives()
          Where(i => path.StartsWith(i.Name, StringComparison.OrdinalIgnoreCase))
          FirstOrDefault();
    if(info == null) return DriveType.Unknown;
    return info.DriveType;
}
//
///获取给定路径的驱动器类型。
/// 
///这条路。
///车道类型
公共静态驱动器类型GetPathDriveType(字符串路径)
{
//好的,所以UNC路径不是“驱动器”,但这仍然很方便
if(path.StartsWith(@“\\”)返回DriveType.Network;
变量信息=
DriveInfo.GetDrives()
其中(i=>path.StartsWith(i.Name,StringComparison.OrdinalIgnoreCase))
FirstOrDefault();
if(info==null)返回DriveType.Unknown;
返回info.DriveType;
}

(您可能还需要注意A.J.Bauer的:DriveInfo还将USB HDs列为DriveType.fixed)

DriveInfo还将USB HDs列为DriveType.fixed,因此,如果您需要知道驱动器的接口是否为USB,这将不会有帮助。以下是返回所有外部USB驱动器盘符的VB.NET函数:

Imports System.Management

Public Shared Function GetExternalUSBDriveLettersCommaSeparated() As String
    Dim usbDrivesString As String = ""

    Dim wmiDiskDriveDeviceID As String = ""
    Dim wmiDiskDriveMediaType As String = ""
    Dim wmiDiskPartitionDeviceID As String = ""
    Dim wmiLogicalDiskDeviceID As String = ""

    Using wmiDiskDrives = New ManagementObjectSearcher("SELECT * FROM Win32_DiskDrive WHERE InterfaceType='USB'")
        For Each wmiDiskDrive As ManagementObject In wmiDiskDrives.Get
            wmiDiskDriveDeviceID = wmiDiskDrive("DeviceID").ToString
            wmiDiskDriveMediaType = wmiDiskDrive("MediaType").ToString.ToLower
            If wmiDiskDriveMediaType.Contains("external") Then
                Using wmiDiskPartitions = New ManagementObjectSearcher("ASSOCIATORS OF {Win32_DiskDrive.DeviceID='" + wmiDiskDriveDeviceID + "'} WHERE AssocClass = Win32_DiskDriveToDiskPartition")
                    For Each wmiDiskPartition As ManagementObject In wmiDiskPartitions.Get
                        wmiDiskPartitionDeviceID = wmiDiskPartition("DeviceID").ToString
                        Using wmiLogicalDisks = New ManagementObjectSearcher("ASSOCIATORS OF {Win32_DiskPartition.DeviceID='" + wmiDiskPartitionDeviceID + "'} WHERE AssocClass = Win32_LogicalDiskToPartition")
                            For Each wmiLogicalDisk As ManagementObject In wmiLogicalDisks.Get
                                wmiLogicalDiskDeviceID = wmiLogicalDisk("DeviceID").ToString
                                If usbDrivesString = "" Then
                                    usbDrivesString = wmiLogicalDiskDeviceID
                                Else
                                    usbDrivesString += "," + wmiLogicalDiskDeviceID
                                End If
                            Next
                        End Using
                    Next
                End Using
            End If
        Next
    End Using

    Return usbDrivesString
End Function
请参阅此MSDN链接: 驱动器类型也将驱动器显示为
驱动器类型。已修复

QueryDosDevice
可用于获取数据

   using System.Runtime.InteropServices;

   [DllImport("kernel32.dll", SetLastError=true)]
   static extern uint QueryDosDevice(string lpDeviceName, StringBuilder lpTargetPath, int ucchMax);

这里有一个完整的解决方案:。

“标题说明了一切”-不,它没有;T您使用的是什么语言/操作系统?是否需要检测正在插入的USB驱动器等etc@Jamiec-我想在这种情况下是这样的。看看他的标签-C#,表示他在使用C#.Net,.Net表示他在使用Windows(很可能),他的问题标题清楚地表明他想知道驱动器号是什么类型的。无论如何,我编辑了这个问题。@Jamiec,“检测插入的USB驱动器”问题已经在这里被打死了,所以;)谢谢,这正是我需要指出的正确方向。这正是我的项目所需要的!非常感谢!这并不总是有效(主要用于外部硬盘)。尝试查看接口类型是否为USB。当前USB驱动器也已修复。示例很好,但我会将该行修改为
path.StartsWith(I.Name,StringComparison.OrdinalIgnoreCase)
,以便它不区分大小写。