C# 如何确定给定的驱动器号是本地驱动器、映射驱动器还是USB驱动器?
给定驱动器的字母,如何确定它是什么类型的驱动器 例如,E:\是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
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)
,以便它不区分大小写。