Sunday, May 1, 2011

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?

From stackoverflow
  • System.IO.DriveInfo.GetDrives()

    Eoin Campbell : Is this something new that was added in the latest version of .NET. I wrote a small app to display this years ago but had to go the WMI route at the time. Very handy to know anyway... cheers
    PaulB : Perfect ... thank you
    Richard : Quick look on MSDN: was added in .NET 2.0.
  • 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

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

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

  • DriveInfo[] drives = DriveInfo.GetDrives();
    
    foreach (DriveInfo drive in drives)
    {
    double fspc = 0.0;
    double tspc = 0.0;
    double percent = 0.0;
    
    fspc = drive.TotalFreeSpace;
    tspc = drive.TotalSize;
    percent = (fspc / tspc)*100;
    float num = (float)percent;
    
    Console.WriteLine("Drive:{0} With {1} % free", drive.Name,num);
    Console.WriteLine("Space Reamining:{0}", drive.AvailableFreeSpace);
    Console.WriteLine("Percent Free Space:{0}",percent);
    Console.WriteLine("Space used:{0}", drive.TotalSize);
    Console.WriteLine("Type: {0}", drive.DriveType);
    }
    

0 comments:

Post a Comment