Как определить количество свободного места на диске

Private Declare Function GetDiskFreeSpaceEx Lib "kernel32" Alias _
"GetDiskFreeSpaceExA" (ByVal lpRootPathName As String, _
lpFreeBytesAvailableToCaller As LARGE_INTEGER, _
lpTotalNumberOfBytes As LARGE_INTEGER, _
lpTotalNumberOfFreeBytes As LARGE_INTEGER) As Long

Private Type LARGE_INTEGER
	lowpart As Long
	highpart As Long
End Type

Dim lpFreeBytesAvailableToCaller As LARGE_INTEGER
Dim lpTotalNumberOfBytes As LARGE_INTEGER
Dim lpTotalNumberOfFreeBytes As LARGE_INTEGER

Dim AllBytes As Double
Dim FreeBytes As Double

Private Sub Command1_Click()
GetDiskFreeSpaceEx "c:\", lpFreeBytesAvailableToCaller, _
lpTotalNumberOfBytes, lpTotalNumberOfFreeBytes
' Всего на диске c
AllBytes = ConvToDouble(lpTotalNumberOfBytes)
' Свободно на диске c
FreeBytes = ConvToDouble(lpTotalNumberOfFreeBytes)
End Sub

Private Function ConvToDouble(n As LARGE_INTEGER) As Double
If n.lowpart >= 0 Then
ConvToDouble = n.lowpart
Else
ConvToDouble = 4294967296# * (n.highpart + 1) + n.lowpart
End If
End Function
Hosted by uCoz