ドライブを列挙する方法

◆概要

このページは、Visual Basic 6.0でドライブを列挙する方法について記載しています。


VB6.0で、ドライブを列挙する方法には、ファイルシステムオブジェクトを使う方法と、Win32 APIを使う方法があります。

◆ファイルシステムオブジェクトでドライブを列挙する方法

まず、ファイルシステムオブジェクトのDrivesコレクションを取得します。このDrivesコレクションには、利用できるドライブのDriveオブジェクトが含まれています。 次に、For Each...Nextステートメントを使って、ひとつひとつのDriveオブジェクトからDriveLetterプロパティとDriveTypeプロパティを取得すれば、全てのドライブが列挙できます。


Step 1 VBからファイルシステムオブジェクトを使うために、[プロジェクト]メニューの[参照設定]ダイアログボックスで、[Microsoft Scripting Runtime]を選択します。

参照設定ダイアログでMicrosoft Scripting Runtimeを選択

フォームにコマンドボタンとリストボックスを配置して、コマンドボックスのクリックイベントプロシージャに次の通り記述してください。

Private Sub Command1_Click()
    Dim objFileSystem   As New FileSystemObject
    Dim colDrives       As Drives
    Dim objDrive        As Drive
    Dim strDriveLetter  As String
    Dim strDriveType    As String
    
    'Drivesコレクションを取得
    Set colDrives = objFileSystem.Drives
    'ドライブが存在する間は
    For Each objDrive In colDrives
        With objDrive
        'ドライブ文字を取得
        strDriveLetter = .DriveLetter & ":"
        'ドライb種別を取得
            Select Case .DriveType
                Case 0:         strDriveType = "Unknown"
                Case Removable: strDriveType = "Removable"
                Case Fixed:     strDriveType = "Fixed"
                Case Remote:    strDriveType = "Remote"
                Case CDRom:     strDriveType = "CDRom"
                Case RamDisk:   strDriveType = "RamDisk"
            End Select
        End With
        'ドライブ文字とドライブ種別を表示
        List1.AddItem strDriveLetter & strDriveType
    Next
    '最初のドライブを選択
    List1.ListIndex = 0
    'Driveコレクションを開放
    Set colDrives = Nothing

End Sub
  

◆Win32 API関数を使ってドライブを列挙する方法

GetLogicalDrive()関数、もしくはGetLogicalDrivesString()関数を使って、利用できるドライブを取得します。ここでは、GetLogicalDriveString()関数を使います。

GetLogicalDriveString()関数は、有効なドライブ文字列を取得する関数です。

有効なドライブは、「A:\<NULL>C:\<NULL>D:\<NULL>E:\<NULL>F:\<NULL><NULL>」というように、ドライブ名がNULL文字(VBではvbNullCharを使います)で区切られた文字列として返されます。この文字列から、NULL文字をデリミッタとして文字列を切り離せば、ドライブ名が取得できます。次に、GetDriveType()関数を使って、ドライブの種類を取得します。GetDriveType()関数には、ドライブ名を引数として渡します。このような操作を全てのドライブに対して行なえば、全てのドライブが列挙できます。

標準モジュール

Option Explicit

'有効なドライブ文字列を取得する関数の宣言
Public Declare Function GetLogicalDriveStrings Lib "kernel32" _
    Alias "GetLogicalDriveStringsA" ( _
    ByVal nBufferLength As Long, _
    ByVal lpBuffer As String _
    ) As Long
'ディスクドライブの種類を取得する関数の宣言
Public Declare Function GetDriveType Lib "kernel32" _
    Alias "GetDriveTypeA" ( _
    ByVal nDrive As String _
    ) As Long

'ディスクドライブの種類を示す定数の宣言
Public Const DRIVE_NODETERMINE_DRIVETYPE = 0
Public Const DRIVE_NOEXIST_ROOTDIRECTORY = 1
Public Const DRIVE_REMOVABLE = 2
Public Const DRIVE_FIXED = 3
Public Const DRIVE_REMOTE = 4
Public Const DRIVE_CDROM = 5
Public Const DRIVE_RAMDISK = 6
  

フォームモジュール

Private Sub Command2_Click()
    Dim strLogicalDriveString   As String * 105
    Dim lngDriveStringPoint     As Long
    Dim lngNullStringPoint      As Long
    Dim lngTerminatePaint       As Long
    Dim strDriveLetter          As String
    Dim lngDriveType            As Long
    Dim strDriveType            As String
    Dim lngWin32apiResultCode   As Long
    
    '有効なドライブ文字列を取得
    lngWin32apiResultCode = _
        GetLogicalDriveStrings(Len(strLogicalDriveString), _
             strLogicalDriveString)
    'ドライブ文字の先頭位置を初期化
    lngDriveStringPoint = 1
    'ドライブ文字列の終端位置を算出
    lngTerminatePaint = InStr(strLogicalDriveString, vbNullChar _
            & vbNullChar)
    'ドライブ文字列の終端まで
    Do While lngNullStringPoint < lngTerminatePaint
        'ドライブ文字の区切り位置を算出
        lngNullStringPoint = InStr(lngDriveStringPoint, _
            strLogicalDriveString, vbNullChar)
        'ドライブ文字を取得
        strDriveLetter = _
            Mid(strLogicalDriveString, lngDriveStringPoint, _
            lngNullStringPoint - lngDriveStringPoint)
        'ドライブ種類を取得
        Select Case GetDriveType(strDriveLetter)
            Case DRIVE_NODETERMINE_DRIVETYPE
                strDriveType = "Unknown"
            Case DRIVE_NOEXIST_ROOTDIRECTORY
                strDriveType = "NoExistRootDirectory"
            Case DRIVE_REMOVABLE
                strDriveType = "Removable"
            Case DRIVE_FIXED
                strDriveType = "Fixed"
            Case DRIVE_REMOTE
                strDriveType = "Remote"
            Case DRIVE_CDROM
                strDriveType = "CDRom"
            Case DRIVE_RAMDISK
                strDriveType = "RamDisk"
        End Select
        'ドライブ文字とドライブ種別を表示
        List1.AddItem Replace(strDriveLetter, "\", "") & strDriveType
        '次のドライブ文字の先頭位置をセット
        lngDriveStringPoint = lngNullStringPoint + 1
    Loop
    '最初のドライブを選択
    List1.ListIndex = 0

End Sub
  

◆実行結果

ドライブを列挙



▼ページトップへ