ディスクの全容量、空き容量を求めよう!!



'===========================================================================
'    ファイル名    : basDiskSpace.bas
'    ファイル説明  : ディスク容量を求める関数
'    作成者        : Uz
'    作成日        : 1998/02/05 (Thu)
'    修正日        : 1998/02/05 (Thu)
'    備考          : なし
'===========================================================================

' -- API関数宣言
Declare Function GetDiskFreeSpace Lib "kernel32" Alias "GetDiskFreeSpaceA" ( _
    ByVal lpRootPathName As String, _
    lpSectorsPerCluster As Long, _
    lpBytesPerSector As Long, _
    lpNumberOfFreeClusters As Long, _
    lpTtoalNumberOfClusters As Long _
) As Long

'///////////////////////////////////////////////////////////////////////////
'      関数名    : GetDiskSpace
'      目的説明  : ディスク容量を返す
'      前提条件  : なし
'      結果      : なし
'      引数      : String   strDriveName    : 求めるドライブ名
'                  Long     lngFlag         : フラグ    0:全容量
'                                                       1:空き容量
'      戻り値    : Double
'      備考      ; なし
'///////////////////////////////////////////////////////////////////////////
Public Function GetDiskSpace(ByVal strDriveName As String, ByVal lngFlag As Long) As Double
    Dim lpRootPathName As String            ' ルートディレクトリ名
    Dim lpSectorsPerCluster As Long         ' クラスタあたりのセクタ数
    Dim lpBytesPerSector As Long            ' セクタあたりのバイト数
    Dim lpNumberOfFreeClusters As Long      ' 空きクラスタ数
    Dim lpTotalNumberOfClusters As Long     ' 総クラスタ数
    
    On Error GoTo ErrorHandle
    
    lpRootPathName = strDriveName
    Call GetDiskFreeSpace(lpRootPathName, _
                          lpSectorsPerCluster, _
                          lpBytesPerSector, _
                          lpNumberOfFreeClusters, _
                          lpTotalNumberOfClusters)
    If lngFlag = 0 Then
        'ディスク全容量を求める
        GetDiskSpace = lpTotalNumberOfClusters * lpSectorsPerCluster * lpBytesPerSector
    ElseIf lngFlag = 1 Then
        'ディスク空き容量を求める
        GetDiskSpace = lpNumberOfFreeClusters * lpSectorsPerCluster * lpBytesPerSector
    Else
        GetDiskSpace = -1
    End If
    Exit Function
ErrorHandle:
    GetDiskSpace = -1
End Function

'===========================================================================
'    ファイル名    : frmMain.frm
'    ファイル説明  : テストフォーム
'    作成者        : Uz
'    作成日        : 1998/02/05 (Thu)
'    修正日        : 1998/02/05 (Thu)
'    備考          : なし
'===========================================================================
Private Sub drvDrive_Change()
    Dim lngSize As Long
    
    lngSize = GetDiskSpace(Left(drvDrive.Drive, 1), 1)
    If lngSize = -1 Then
        lblFree.Caption = "ERROR"
    Else
        lblFree.Caption = CStr(lngSize / 1024 / 1024) & "MB"
    End If
    
    lngSize = GetDiskSpace(Left(drvDrive.Drive, 1), 0)
    If lngSize = -1 Then
        lblTotal.Caption = "ERROR"
    Else
        lblTotal.Caption = CStr(lngSize / 1024 / 1024) & "MB"
    End If
End Sub

Private Sub Form_Load()
    drvDrive.Drive = "c:\"
End Sub