Getting a list of logical drives

How can I get the list of logial drives (C#) on a system as well as their capacity and free space?

7 Answers

System.IO.DriveInfo.GetDrives()

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

Directory.GetLogicalDrives

Their example has more robust, but here's the crux of it

string[] drives = System.IO.Directory.GetLogicalDrives();
foreach (string str in drives)
{ System.Console.WriteLine(str);
}

You could also P/Invoke and call the win32 function (or use it if you're in unmanaged code).

That only gets a list of the drives however, for information about each one, you would want to use GetDrives as Chris Ballance demonstrates.

maybe this is what you want:

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

You can retrieve this information with Windows Management Instrumentation (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 more info here about the attribute you can poll

2

This is a wonderful piece of code.

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

I deployed an SSIS package and was getting an error simply because on Ballance example we are reading the drives without waiting for them to be ready:

string EmailMessage = "";
foreach (var drive in System.IO.DriveInfo.GetDrives())
{ if (drive.IsReady == true) /*Make sure we can read*/ { double freeSpace = drive.TotalFreeSpace; double totalSpace = drive.TotalSize; double percentFree = (freeSpace / totalSpace) * 100; float num = (float)percentFree; //MessageBox.Show("Drive:" + drive.Name + " With " + num + "% free."); if (num < 5) { EmailMessage = "Drive:" + drive.Name + " With " + num + "% free."; } }
}

Your Answer

Sign up or log in

Sign up using Google Sign up using Facebook Sign up using Email and Password

Post as a guest

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge that you have read and understand our privacy policy and code of conduct.

You Might Also Like