2012-04-17 7 views
5

Tengo un archivo txt con id. De volumen.Cómo obtener información de la unidad por volumen id

que necesito para obtener Información de la unidad (letra de la unidad, el tamaño del disco, etc.) de la Identificación del volumen de unidad (Windows):

el identificador de volumen está en el siguiente formato:

\\?\Volume{XXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX} 

El unidad puede ser extraíble/disco local

No importa cómo se recupera la información (podría ser script, cpp, C#, código java).

EDIT:

He intentado utilizar DriveInfo, Win32_LogicalDisk, Win32_Volume, Win32_PnpDevices - pero no pude encontrar este extraño Identificación del ... en todos los casos el identificador tiene un formato differrent

ACTUALIZACIÓN:

Encontré cómo hacerlo.

se puede enumerar Win32_Volume así:

ManagementObjectSearcher ms = new ManagementObjectSearcher("Select * from Win32_Volume");  
foreach(ManagementObject mo in ms.Get()) 
{ 
    var guid = mo["DeviceID"].ToString(); 

    if(guid == myGuid) 
     return mo["DriveLetter"]; 
} 
+0

¿Cómo conseguiste esa identificación en el archivo txt? Invertirlo para alcanzar los resultados. –

+0

Estoy intentando rastrear dónde "Historial de archivos" (nueva función en Windows 8) está guardando sus archivos de respaldo. Descubrí que el nombre del dispositivo de destino se guarda en un archivo xml, también guarda la letra y el nombre de la unidad, pero esto no es suficiente porque estos parámetros no son únicos y pueden cambiarse: alguien puede expulsar el dispositivo y luego la próxima vez tendrá asignada una letra diferente, etc. ... así que descubrí que Microsoft también guarda algo que se ve así: " \\? \ Volume {XXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX} <\ TargetVolumePath> "que es identificación única. – user844541

Respuesta

2

El tamaño del volumen, etcétera es fácil. Simplemente use los métodos normales de Win32. Cualquier función que acepte "C:" como unidad también aceptará la ruta de GUID de volumen (porque así se llama correctamente un \\?\Volume{XXX}).

La "letra de unidad" es un poco más complicada, ya que puede haber 0, 1 o más letras de unidad. Debe llamar al FindFirstVolumeMountPoint/FindNextVolumeMountPoint/FindVolumeMountPointClose para obtener todos ellos.

+0

¿Se puede agregar una muestra de código usando WMI? Usé GetVolumeNameForVolumeMountPoint y funciona, pero no pude hacerlo funcionar con wmi. – user844541

+0

Vea el ejemplo en http://msdn.microsoft.com/en-us/library/windows/desktop/aa394515(v=vs.85).aspx – MSalters

2

Probar Usar este

System.Management.ManagementObjectSearcher ms = 
new System.Management.ManagementObjectSearcher("SELECT * FROM Win32_DiskDrive"); 
foreach (ManagementObject mo in ms.Get()) 
{ 
    //Find by ID 
} 

Para más detalles Reed este Win32_DiskDrive class

-2

Puede utilizar DriveInfo.GetDrives Method para obtener Información de la unidad. Aquí está el código de muestra de MSDN

DriveInfo[] allDrives = DriveInfo.GetDrives(); 

foreach (DriveInfo d in allDrives) 
{ 
    Console.WriteLine("Drive {0}", d.Name); 
    Console.WriteLine(" File type: {0}", d.DriveType); 
    if (d.IsReady == true) 
    { 
     Console.WriteLine(" Volume label: {0}", d.VolumeLabel); 
     Console.WriteLine(" File system: {0}", d.DriveFormat); 
     Console.WriteLine(
      " Available space to current user:{0, 15} bytes", 
      d.AvailableFreeSpace); 

     Console.WriteLine(
      " Total available space:   {0, 15} bytes", 
      d.TotalFreeSpace); 

     Console.WriteLine(
      " Total size of drive:   {0, 15} bytes ", 
      d.TotalSize); 
    } 
} 
+0

Aunque este código enumera las unidades actualmente instaladas en la computadora, desafortunadamente no responde la pregunta (es decir, cómo acceder a las unidades mediante GUID), no hay ninguna propiedad en 'DriveInfo' que se relacione con el GUID de una unidad. – jrh

1

hay una función de API para esto: GetVolumePathNamesForVolumeName

Devuelve una matriz nula terminado, para permitir el montaje de múltiples puntos. Si solo tiene un punto de montaje (típico), puede leerlo como una cadena con terminación nula normal.

Esto es más eficiente que enumerar discos/volúmenes, lo que podría hacer que los discos inactivos giren.

Cuestiones relacionadas