unidad rutas reconocido puedo permanente letra externo duro disco como cambio cambiar asignar acceso c# .net path usb

c# - reconocido - no puedo cambiar la letra y rutas de acceso de unidad



¿Cómo puedo determinar si una letra de unidad dada es una unidad local, asignada o USB? (5)

DriveInfo también incluirá los discos duros USB como DriveType.fixed, por lo que esto no ayuda si necesita saber si la interfaz de una unidad es USB o no. Aquí hay una función VB.NET que devuelve todas las letras de la unidad USB externa:

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

Vea este enlace de MSDN: Tareas de WMI: Discos y sistemas de archivos

Dada la letra de una unidad, ¿cómo puedo determinar qué tipo de unidad es?

Por ejemplo, si E: / es una unidad USB, una unidad de red o una unidad de disco duro local.


DriveType muestra las unidades DriveType.Fixed también como DriveType.Fixed .

Para verificar si una unidad está sustentada, uso el código Cómo determinar si una ruta de directorio fue SUBST .



Solo como referencia para cualquier otra persona, esto es lo que convertí en la respuesta de GenericTypeTea en:

/// <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; }

(Es posible que también desee tomar nota de la answer AJBauer : DriveInfo también mostrará las unidades de disco duro USB como DriveType.fixed )


Eche un vistazo a la propiedad DriveType .

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; } }