This function returns the hard disk free bytes, total bytes, percentage of free bytes, and used space. Before calling the function, set the first field of the DISKSPACEINFO structure (“RootPath”) to the drive letter:
Dim dsi As DISKSPACEINFOdsi.RootPath = "C:"GetDiskSpace dsi
The function returns all its results in the other field of the record:
' *** Declaratiosn Section ******Declare Function GetDiskFreeSpace Lib _ "kernel32" Alias _ "GetDiskFreeSpaceA" _ (ByVal lpRootPathName As String, _ lpSectorsPerCluster As Long, _ lpBytesPerSector As Long, _ lpNumberOfFreeClusters As Long, _ lpTotalNumberOfClusters As Long) _ As LongType DISKSPACEINFO RootPath As String * 3 FreeBytes As Long TotalBytes As Long FreePcnt As Single UsedPcnt As SingleEnd Type' ****** Code Module ******Function GetDiskSpace(CurDisk As _ DISKSPACEINFO) Dim X As Long Dim SxC As Long, BxS As Long Dim NOFC As Long, TNOC As Long X& = GetDiskFreeSpace_ (CurDisk.RootPath, SxC, BxS, _ NOFC, TNOC) GetDiskSpace = X& If X& Then CurDisk.FreeBytes = BxS * _ SxC * NOFC CurDisk.TotalBytes = BxS * _ SxC * TNOC CurDisk.FreePcnt = ((CurDisk._ TotalBytes CurDisk._ FreeBytes) / CurDisk._ TotalBytes) * 100 CurDisk.UsedPcnt = _ (CurDisk.FreeBytes / _ CurDisk.TotalBytes) * 100 Else CurDisk.FreeBytes = 0 CurDisk.TotalBytes = 0 CurDisk.FreePcnt = 0 CurDisk.UsedPcnt = 0 End IfEnd Function
As is, this routine works with drives with a capacity of up to about 2G; for larger disks, you should use Single variables instead.