2009-04-23 12 views

Respuesta

50
+0

Es algo nuevo que se ha agregado en la última versión de .NET. Escribí una pequeña aplicación para mostrar esto hace años pero tuve que ir a la ruta WMI en ese momento. Muy útil para saber de todos modos ... ovaciones –

+0

Perfecto ... gracias – PaulB

+0

Vista rápida en MSDN: se agregó en .NET 2.0. – Richard

0

Puede recuperar esta información con Windows (WMI)

using System.Management; 

    ManagementObjectSearcher mosDisks = new ManagementObjectSearcher("SELECT * FROM Win32_DiskDrive"); 
    // Loop through each object (disk) retrieved by WMI 
    foreach (ManagementObject moDisk in mosDisks.Get()) 
    { 
     // Add the HDD to the list (use the Model field as the item's caption) 
     Console.WriteLine(moDisk["Model"].ToString()); 
    } 

Theres más información aquí sobre el atributo puede sondear

http://www.geekpedia.com/tutorial233_Getting-Disk-Drive-Information-using-WMI-and-Csharp.html

+0

No puedo hacer que esto funcione en mi computadora. System.Management ahora no tiene la clase ManagementObjectSearcher. La URL tampoco apunta a una página web válida. –

+0

Necesita agregar una referencia para eso. En Visual Studio, haga clic con el botón derecho en el proyecto y luego vaya a Agregar -> Referencia. Luego, busca "System.Management" y agrégalo. – Gippeumi

18

Directory.GetLogicalDrives

Su ejemplo tiene más robusto, pero aquí está el quid de la cuestión

  string[] drives = System.IO.Directory.GetLogicalDrives(); 

      foreach (string str in drives) 
      { 
       System.Console.WriteLine(str); 
      } 

También P/Invoke y podría llamar a la función Win32 (o usarlo si estás en código no administrado).

Eso solo obtiene una lista de las unidades, sin embargo, para obtener información acerca de cada una, le conviene usar GetDrives como lo demuestra Chris Ballance.

24
foreach (var drive in DriveInfo.GetDrives()) 
{ 
    double freeSpace = drive.TotalFreeSpace; 
    double totalSpace = drive.TotalSize; 
    double percentFree = (freeSpace/totalSpace) * 100; 
    float num = (float)percentFree; 

    Console.WriteLine("Drive:{0} With {1} % free", drive.Name, num); 
    Console.WriteLine("Space Remaining:{0}", drive.AvailableFreeSpace); 
    Console.WriteLine("Percent Free Space:{0}", percentFree); 
    Console.WriteLine("Space used:{0}", drive.TotalSize); 
    Console.WriteLine("Type: {0}", drive.DriveType); 
} 
3

tal vez esto es lo que quiere:

listBox1.Items.Clear(); 

foreach (DriveInfo f in DriveInfo.GetDrives())  
    listBox1.Items.Add(f); 
+0

Es posible que también desee comprobar la propiedad IsReady –

0

Esta es una maravillosa pieza de código.

ObjectQuery query = 
    new ObjectQuery("SELECT * FROM Win32_LogicalDisk WHERE DriveType=3"); // Create query to select all the hdd's 

ManagementObjectSearcher searcher = 
    new ManagementObjectSearcher(scope, query); // run the query 

ManagementObjectCollection queryCollection = searcher.Get(); // get the results 
string sVolumeLabel = ""; 
string[,] saReturn = new string[queryCollection.Count, 7]; 
int i = 0; // counter for foreach 

foreach (ManagementObject m in queryCollection) 
{ 
    if (string.IsNullOrEmpty(Convert.ToString(m["VolumeName"]))) { sVolumeLabel = "Local Disk"; } else { sVolumeLabel = Convert.ToString(m["VolumeName"]); } // Disk Label 
    string sSystemName = Convert.ToString(m["SystemName"]); // Name of computer 
    string sDriveLetter = Convert.ToString(m["Name"]); // Drive Letter 

    decimal dSize = Math.Round((Convert.ToDecimal(m["Size"])/1073741824), 2); //HDD Size in Gb 
    decimal dFree = Math.Round((Convert.ToDecimal(m["FreeSpace"])/1073741824), 2); // Free Space in Gb 
    decimal dUsed = dSize - dFree; // Used HDD Space in Gb 

    int iPercent = Convert.ToInt32((dFree/dSize) * 100); // Percentage of free space 

    saReturn[i,0] = sSystemName; 
    saReturn[i,1] = sDriveLetter; 
    saReturn[i,2] = sVolumeLabel; 
    saReturn[i,3] = Convert.ToString(dSize); 
    saReturn[i,4] = Convert.ToString(dUsed); 
    saReturn[i,5] = Convert.ToString(dFree); 
    saReturn[i,6] = Convert.ToString(iPercent); 

    i++; // increase counter. This will add the above details for the next drive. 
} 
Cuestiones relacionadas