首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何确定给定的驱动器号是本地驱动器、映射驱动器还是USB驱动器?

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

Stack Overflow用户
提问于 2010-12-09 17:28:21
回答 4查看 22.3K关注 0票数 22

在给定驱动器盘符的情况下,如何确定驱动器的类型?

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

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2010-12-09 17:34:05

看看DriveInfoDriveType属性。

代码语言:javascript
复制
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;
    }
}
票数 42
EN

Stack Overflow用户

发布于 2014-01-30 23:41:41

DriveInfo还会将USB列为DriveType.fixed,所以如果你需要知道驱动器的接口是否是U盘接口,这对你没有帮助。下面是一个返回所有外部VB.NET驱动器号的U盘函数:

代码语言:javascript
复制
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链接:WMI Tasks: Disks and File Systems

票数 7
EN

Stack Overflow用户

发布于 2016-05-17 22:18:27

DriveType将SUBSTed驱动器也显示为DriveType.Fixed

可以使用QueryDosDevice来获取数据

代码语言:javascript
复制
   using System.Runtime.InteropServices;

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

这里有一个完整的解决方案:How to determine if a directory path was SUBST'd

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4396634

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档