Visual Basic Code of the Week (COTW)
Issue #51
Online Version at (paid subscribers only)
All content and source code is Copyright (c) 1998 by C&D Programming Corp. No part of this issue can be reprinted or distributed in any manner without express written permission of C&D Programming Corp.

Notes about this ezine

If you are not a paid subscriber, you must have signed up for our free trial at Our ezine is not an unsolicited message (in other words a spam email). Keep in mind that if you signed up for our free trial you can still receive a total of four issues at no cost to you. After you receive the four issues you will be notified about continuing your subscription.

If you do not wish to continue to receive this ezine, please email us at

Requirements for this Issue

The source code in this issue is designed for Visual Basic 5.0 and above. If you want to make this source code work under VB 4.0 32-bit, just change the Enum types to normal Const values.

If you have any questions about this issue, please email us at

In this Issue

This issue expands on the cVolumeInfo class introduced last week. This week we add the ability to gather the total disk space and the available disk space for a disk drive. It accomplishes this task by using an API call, GetDiskFreeSpace.


Last week we sent you the first version of the cVolumeInfo class. It had the ability to determine the label of a disk drive. This week we have included an updated cVolumeInfo class which has two new functions for getting the total disk space and the available free disk space. The first function, TotalDiskSpace will gather the total disk space information for the drive specified by the Drive property. The second function, FreeDiskSpace will gather the available free disk space information for the drive specified by the Drive property. The number returned from both functions are data type Double. This should handle the largest available drives currently on the market.

Inside the two functions you will notice some multiplication done with SectorsPerCluster and BytesPerSector. The GetDiskFreeSpace returns this information. For those of you not familiar with the way data storage is laid out, a quick lesson follows. On your hard drive, the smallest unit of data storage is called a sector. In order to handle data efficiently on larger hard drives, the operating system combines several sectors together to form a cluster. When you multiply the SectorsPerCluster by the BytesPerCluster you will get the total number of bytes stored in each cluster. This number multiplied by the available clusters or the total clusters on the drive will give you the free disk space or the total disk space. If you have any additional questions about this topic, drop us an email at

Function Definitions

Public Function TotalDiskSpace() As Double
Public Function FreeDiskSpace() As Double

Sample Usage

On frmDriveType we created a ListView control called lvDrives. We also created a command button called cmdClose. This sample will scan all drives looking for volume labels, total disk size and available disk space.

Option Explicit

Private Sub cmdClose_Click()
    Unload Me
End Sub

Private Sub Form_Load()
End Subdata is

Private Sub SetupForm()
    With lvDrives
        .ColumnHeaders.Add , "Drive", "Drive"
        .ColumnHeaders.Add , "Volume Label", "Volume Label"
        .ColumnHeaders.Add , "Total Size", "Total Size", , lvwColumnRight
        .ColumnHeaders.Add , "Free Space", "Free Space", , lvwColumnRight
        .Sorted = True
        .SortKey = 0
        .View = lvwReport
    End With
End Sub

Private Sub ShowDriveInfo()
    Dim x As Integer
    Dim itm As ListItem
    Dim sDrive As String
    Dim lDriveType As Long
    Dim sDriveTypeDesc As String

    For x = 67 To 90
        sDrive = Chr$(x)

        Dim vol As New cVolumeInfo
        vol.Drive = sDrive
        ' only add drives that have labels
        If vol.Label <> "" Then
            Set itm = lvDrives.ListItems.Add(, sDrive, sDrive)
            itm.SubItems(1) = vol.Label
            itm.SubItems(2) = Format$(vol.TotalDiskSpace, "###,###,###")
            itm.SubItems(3) = Format$(vol.FreeDiskSpace, "###,###,###")
        End If
End Sub

Source Code

To see the source code for this issue you must be a subscriber to Code of the Week. If you are a subscriber the source code is available at the following address:

This document is available on the web

Paid subscribers can view this issue in HTML format. There is no additional source or information in the HTML formatted document. It just looks a little better since we have included some HTML formatting. Just point your browser to link at the top of this document.


That concludes this issue of COTW. We hope you find the source code useful in your development.

The below describes the ways you can supply us some feedback about COTW. We would like to see our members help mold COTW into the best Visual Basic source code resource available. But to do that we need your feedback about what you like and what you do not like about COTW.


If you are interested in advertising in COTW please email us at Our rates are VERY reasonable, actually they are almost FREE. We reach over five thousand Visual Basic developers each week.

How to tell us what you think

If you have any suggestions for topics you would like to see covered or questions about this issue, please email them to or use online feedback form at

If you have any source code you would like to submit for possible inclusion in COTW, please fill out our online submission form at

Contact Information

C&D Programming Corp.
PO Box 20128
Floral Park, NY 11002-0128
Phone or Fax: (212) 504-7945

Subscription Update

Thank you for trying Code of the Week for Visual Basic.

Your free trial expires after you receive your fourth issue. If you want to continue to receive Code of the Week you can get 52 issues of COTW for only $19.95. This is a full year of Visual Basic source code and information to help with all your development. So don't wait, subscribe now! The quickest way to subscribe is to jump to our online order form at