GetDiskFreeSpace (kernel32)
Last changed: -72.248.115.51

.
Summary
Retrieves information about the specified disk, including the amount of free space on the disk.

C# Signature:

[DllImport("kernel32.dll", SetLastError=true, CharSet=CharSet.Auto)]
static extern bool GetDiskFreeSpace(string lpRootPathName,
   out uint lpSectorsPerCluster,
   out uint lpBytesPerSector,
   out uint lpNumberOfFreeClusters,
   out uint lpTotalNumberOfClusters);

Notes:

The GetDiskFreeSpace function cannot report volume sizes that are greater than 2 gigabytes (GB). To ensure that your application works with large capacity hard drives, use the GetDiskFreeSpaceEx function.

Tips & Tricks:

If you are reading information for multiple drives and/or do not need sector cluster information, use the Managed API instead (System.IO.DriveInfo)

Sample Code:

uint SectorsPerCluster;
uint BytesPerSector;
uint NumberOfFreeClusters;
uint TotalNumberOfClusters;

GetDiskFreeSpace("C:\\", out SectorsPerCluster, out BytesPerSector,
   out NumberOfFreeClusters, out TotalNumberOfClusters);

Console.WriteLine("Sectors Per Cluster: {0}", SectorsPerCluster);
Console.WriteLine("Bytes Per Sector: {0}", BytesPerSector);
Console.WriteLine("Number Of Free Clusters: {0}", NumberOfFreeClusters);
Console.WriteLine("Total Number Of Clusters: {0}", TotalNumberOfClusters);    

// SectorsPerCluster * BytesPerSection will give you how many bytes are available per sector
// And by multiplying the result with NumberOfFreeClusters gives you the free space in bytes.
long Bytes = (long)NumberOfFreeClusters * SectorsPerCluster * BytesPerSector;
Console.WriteLine("Total Free Space in bytes: {0} ", Bytes);

decimal KiloBytes = (decimal)Bytes / 1024;
Console.WriteLine("Total Free Space in kilo bytes: {0}", KiloBytes);

decimal MegaBytes = (decimal)KiloBytes / 1024;
Console.WriteLine("Total Free Space in mega bytes: {0}", MegaBytes);

decimal GigaBytes = (decimal)MegaBytes / 1024;
Console.WriteLine("Total Free Space in giga bytes: {0}", GigaBytes);

Console.WriteLine("Please enter any key to exit...");
Console.ReadLine();

Alternative Managed API:

Class
System.IO.DriveInfo

Differences From Above Function: You won't be able to get sector/cluster counts

Drawbacks
Documentation