如何列舉目前電腦中所有的邏輯磁碟機 ?
如何取得電腦所有邏輯磁碟機 (代號)
方法1:
' API 宣告 , 取得一個字串,內含了目前所有邏輯磁碟機的路徑
Private Declare Function GetLogicalDriveStrings Lib "kernel32" Alias "GetLogicalDriveStringsA" _
(ByVal nBufferLength As Long, ByVal lpBuffer As String) As Long
' Fills a buffer with strings that specify valid drives in the system.
Dim strDrvLst As String
Dim varAry As Variant
Dim varElement As Variant
' 準備一字串內容為 Chr(0) 長度為 78 的字串 , 供後續呼叫 API 使用
strDrvLst = String(78, Chr(0))
' PS : 一般字串長度會設為 255 , 但因磁碟機是用英文字母為磁碟代號 , So 最多有 26 個邏輯磁碟機
' 因此每個磁碟機只需準備 3 個字元空間來存放 ( 如 C:\ ) , 所以共 78 個字元長度即可
' 呼叫 GetLogicalDriveStrings API 並傳入長度及緩衝區(接收) 參數
GetLogicalDriveStrings 78, strDrvLst
' Split 函數 : 傳回一個陳列索引從零開始的一維陣列。
varAry = Split(strDrvLst, Chr(0)) ' 將字串用 Chr(0) 字元分隔 , 放置 varAry 一維陣列裡
For Each varElement In varAry ' For Each / Next 迴圈 , 列舉邏輯磁碟
If Len(varElement) > 0 Then Print varElement ' 將邏輯磁碟機印在表單上
Next ' Loop 一維陣列內所有子元素
================================================================
' API 宣告 , 取得某 (一個) 磁碟機類型
Private Declare Function GetDriveType Lib "kernel32" Alias "GetDriveTypeA" _
(ByVal nDrive As String) As Long
Dim bytLoop As Byte
Dim strDrv As String
For bytLoop = 0 To 25 ' For / Loop 迴圈 , 列舉邏輯磁碟 ( 最多有 26 個邏輯磁碟機 )
' Chr(65) 為 A , 由磁碟機 A Loop 至 磁碟機 Z
strDrv = Chr(bytLoop + 65) & ":\"
' 如磁碟機不能識別,則傳回零。如指定的目錄不存在,則傳回1
If GetDriveType(strDrv) > 1 Then Print strDrv ' 將邏輯磁碟機印在表單上
Next
================================================================
方法3:
Dim objFS As Object
Dim objDrv As Object
Set objFS = CreateObject("Scripting.FileSystemObject") ' 建立檔案系統物件
' FSO.Drives 屬性 : 傳回包含本機上所有可用 Drive 物件的 Drives 集合物件。
For Each objDrv In objFS.Drives ' For Each / Next 迴圈 , 列舉邏輯磁碟
' FSO.DriveLetter 屬性 : 傳回某個物理本機磁碟機或網路共用的磁碟機代碼。(唯讀屬性)
Print objDrv.DriveLetter & ":\" ' 將邏輯磁碟機印在表單上
Next
================================================================
方法4:
' API 宣告 , 取得系統中目前有哪些邏輯磁碟機(字母)
Private Declare Function GetLogicalDrives Lib "kernel32" () As Long
' The return value is a bit mask representing the currently available disk drives
' Bit position 0 (the least-significant bit) is drive A
' Bit position 1 is drive B, bit position 2 is drive C, and so on.
Dim lngLDs As Long
Dim bytLoop As Byte
lngLDs = GetLogicalDrives ' 呼叫 GetLogicalDrives API
' 回傳 Long , 該結構以二進制 標示存在哪些磁碟機
' 位 0 為 1 表示磁碟機 A: 存在於系統中;位 1 為 1 表示存在 B: 磁碟機存在於系統中;依此類推
For bytLoop = 0 To 25 ' For / Loop 迴圈 , 列舉邏輯磁碟 ( 最多有 26 個邏輯磁碟機 )
' ^運算子 , 用來使一個數字提升成為指數的次方數。
If (lngLDs And 2 ^ bytLoop) <> 0 Then Print Chr(65 + bytLoop) & ":\" ' 將邏輯磁碟機印在表單上
Next