Подтвердить что ты не робот

Получение списка логических дисков

Как я могу получить список логических дисков (С#) в системе, а также их емкость и свободное пространство?

4b9b3361

Ответ 2

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

Directory.GetLogicalDrives

Их пример более надежный, но здесь его суть

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

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

Вы также можете P/Invoke и вызвать функцию win32 (или использовать ее, если находитесь в неуправляемом коде).

Для получения информации о каждом из них будет только список дисков, вы бы хотели использовать GetDrives, как демонстрирует Крис Баланс.

Ответ 4

возможно, это то, что вы хотите:

listBox1.Items.Clear();

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

Ответ 5

Вы можете получить эту информацию с помощью инструментария управления 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 caption)
        Console.WriteLine(moDisk["Model"].ToString());
    }

Подробнее здесь о атрибуте, который вы можете опросить

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

Ответ 6

Это замечательный фрагмент кода.

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