如何索取当前机器的所有驱动器及每个驱动器下的所有文件夹?

解决方案 »

  1.   

    vb里用递归不是很好,你最好调用几个api函数,
    可惜我手头没有现成的程序给你,。
    帮你up
      

  2.   

    Private Declare Function GetLogicalDriveStrings Lib "kernel32" Alias "GetLogicalDriveStringsA" (ByVal nBufferLength As Long, ByVal lpBuffer As String) As Long
      Private Declare Function GetDriveType Lib "kernel32" Alias "GetDriveTypeA" (ByVal nDrive As String) As Long
      Private Declare Function GetLogicalDrives Lib "kernel32" () As Long
      下面,开始编写代码:
      首先建立一个drivecount的函数,用来返回磁盘驱动器的个数,代码如下:
    Public Function DriveCount() As Integer
    Dim BitMask As Long
    Dim j, i
    BitMask = GetLogicalDrives()
    For i = 0 To 24
    If BitMask And 2 ^ i Then
    j = j + 1
    End If
    Next i
    DriveCount = j
    End Function
    之后,再建立一个函数,专门用来返回驱动器的名称,代码如下:
    Public Function LoadDrivenames(An_Array() As String) As Long
    Dim j, i
    Dim lpBuffer As String
    ReDim An_Array(128) As String
    lpBuffer = Space$(1024)
    GetLogicalDriveStrings Len(lpBuffer), lpBuffer
    j = InStr(lpBuffer, Chr$(0))
    Do While j > 0
    An_Array(i) = Left$(lpBuffer, j - 1)
    i = i + 1
    lpBuffer = Mid$(lpBuffer, j + 1)
    j = InStr(lpBuffer, Chr$(0))
    Loop
    ReDim Preserve An_Array(DriveCount)
    End Function
    这个函数中用一个数组An_Array()来存储磁盘驱动器的名称。
    下面,再建立一个函数用来返回磁盘驱动器的类型,代码如下:
    Public Function Types(Optional sDrive As String) As String
    Select Case GetDriveType(sDrive) '注:此处必为"c:\",不能为"c"
    Case 0
    Types = "UNKNOWN"
    Case 1
    Types = "UNKNOWN"
    Case 2
    Types = "DRIVE_REMOVABLIE"
    Case 3
    Types = "DRIVE_FIXED"
    Case 4
    Types = "DRIVE_REMOTE"
    Case 5
    Types = "DRIVE_CDROM"
    Case 6
    Types = "DRIVE_RAMDISK"
    Case Else
    Types = "ERROR"
    End Select
    End Function
    注意:这个函数的参数sdrive:只能为如"c:\"形式的,而不能为"c"形式的。
    下面就可以调用这几个函数,来获得我们想要的东西。
    在command1_click事件中,加入以下代码:
    Private Sub Command1_Click()
    Dim a() As String '用来存储磁盘驱动器的名称,形式为"c:\"等
    Dim i As Integer
    Form1.Cls '每次点击都刷新显示窗体,本程序是在窗体上显示的
    Print "驱动器个数:" 
    Print DriveCount '调用drivecount返回磁盘驱动器的个数
    Call LoadDrivenames(a) '调用loaddrivename,以a为参数,返回驱动器名称
    For i = 0 To DriveCount - 1
    Print " ";
    Print a(i);
    Print " ---- ";
    Print Types(a(i)) '调用types,返回驱动器类型
    Next i
    End Sub  好了,点一下run,就可以运行了,有一点需要说明,当装了虚拟光驱时,被虚拟的硬盘的类型也被认为是光盘驱动器,即Types = "DRIVE_CDROM".
      

  3.   

    可以用driver,dirlistbox,filelistbox组合查询