Для определения свободного места на диске в Win32 используются функции GetDiskFreeSpaceEx или GetDiskFreeSpace. В принципе, функция GetDiskFreeSpaceEx возвращает всю необходимую информацию, включая свободное место доступное пользователю, ассоциированному с вызывающим потоком. Но, как это обычно бывает с удобными и полезными функциями, она отсутствует в ранних версиях Windows.
Раньше я юзал примерно так:
[Private Declare Function GetDiskFreeSpaceEx Lib "kernel32" Alias "GetDiskFreeSpaceExA" (ByVal lpRootPathName As String, lpFreeBytesAvailableToCaller As Currency, lpTotalNumberOfBytes As Currency, lpTotalNumberOfFreeBytes As Currency) As Long
Private Sub Form_Load()
Dim r As Long, BytesFreeToCalller As Currency, TotalBytes As Currency
Dim TotalFreeBytes As Currency, TotalBytesUsed As Currency
Const RootPathName = "C:\"
Call GetDiskFreeSpaceEx(RootPathName, BytesFreeToCalller, TotalBytes, TotalFreeBytes)
Me.AutoRedraw = True
Me.Cls
Me.Print
Me.Print " Всего:", Format$(TotalBytes * 10000, "###,###,###,##0") & " bytes"
Me.Print " Всего свободно:", Format$(TotalFreeBytes * 10000, "###,###,###,##0") & " bytes"
Me.Print " Доступно:", Format$(BytesFreeToCalller * 10000, "###,###,###,##0") & " bytes"
Me.Print " Всего занято:", Format$((TotalBytes - TotalFreeBytes) * 10000, "###,###,###,##0") & " bytes"
End Sub]
На .NET ещё не было необходимости, не копал ...