手机站
网通分站
电信主站
密 码:
用户名:
当前位置 : 主页>网络编程>Asp.Net编程>列表

如何在VB中实现目录遍历

来源:互联网 作者:西部数码 时间:2008-04-09
西部数码-全国虚拟主机10强!40余项虚拟主机管理功能,全国领先!双线多线虚拟主机南北访问畅通无阻!免费赠送企业邮局,.CN域名,自助建站480元起,免费试用7天,满意再付款! P4主机租用799元/月.月付免压金!


   If iIndex > 0 Then

    For i = 1 To iIndex

      sDirTraversal sSubDir(i), objList

    Next

   End If

  End Sub

---- 利 用 以 上 遍 历 方 法, 读 者 可 以 根 据 数 据 类 型WIN32_FIND_DATA 的dwFileAttributes、ftCreationTime、ftLastAccessTime、ftLastWriteTime 元 素 来 扩 充 文 件 查 询 功 能( 按 文 件 属 性、 创 建 日 期、 最 后 修 改 日 期、 最 后 访 问 日 期 等 不 同 条 件 的 查 询)。

  完 整 代 码 :

'''''''''''''''''''''''''''''''''''''''''''

'API函数的声明、常量、自定义数据类型

''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

'API函数的声明

Public Declare Function FindFirstFile Lib "kernel32" Alias "FindFirstFileA" (ByVal lpFileName As String, lpFindFileData As WIN32_FIND_DATA) As Long

Public Declare Function FindNextFile Lib "kernel32" Alias "FindNextFileA" (ByVal hFindFile As Long, lpFindFileData As WIN32_FIND_DATA) As Long

Public Declare Function FindClose Lib "kernel32" (ByVal hFindFile As Long) As Long

''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'最大路径长度和文件属性常量的定义

Public Const MAX_PATH = 260

Public Const FILE_ATTRIBUTE_ARCHIVE = &H20

Public Const FILE_ATTRIBUTE_COMPRESSED = &H800

Public Const FILE_ATTRIBUTE_DIRECTORY = &H10

Public Const FILE_ATTRIBUTE_HIDDEN = &H2

Public Const FILE_ATTRIBUTE_NORMAL = &H80

Public Const FILE_ATTRIBUTE_READONLY = &H1

Public Const FILE_ATTRIBUTE_SYSTEM = &H4

Public Const FILE_ATTRIBUTE_TEMPORARY = &H100

'自定义数据类型FILETIME和WIN32_FIND_DATA的定义

Public Type FILETIME

dwLowDateTime As Long

dwHighDateTime As Long

End Type

Public Type WIN32_FIND_DATA

 dwFileAttributes As Long

 ftCreationTime As FILETIME

 ftLastAccessTime As FILETIME

 ftLastWriteTime As FILETIME

 nFileSizeHigh As Long

 nFileSizeLow As Long

 dwReserved0 As Long

 dwReserved1 As Long

 cFileName As String * MAX_PATH

 cAlternate As String * 14

End Type

''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

'去掉固定长度字符串右边的NULL字符(ASCII值为0)和SPACE字符(ASCII值为32)函数

''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

Public Function fDelInvaildChr(str As String) As String

 On Error Resume Next

 For i = Len(str) To 1 Step -1

  If Asc(Mid(str, i, 1)) <> 0 And Asc(Mid(str, i, 1)) <> 32 Then

   fDelInvaildChr = Left(str, i)

   Exit For

  End If

 Next

End Function

''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'遍历主函数

'参数说明:

' strPathName 要遍历的目录

' objList 使用VB的内部控件ListBox来存放遍历得到的路径,之所以

' 不使用字符串数组是因为数组大小不好定义

''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

Public Sub sDirTraversal(ByVal strPathName As String, ByRef objList As ListBox)

 Dim sSubDir(200) As String '存放当前目录下的子目录,下标可根据需要调整

 Dim iIndex As Integer '子目录数组下标

 Dim i As Integer '用于循环子目录的查找

 Dim lHandle As Long 'FindFirstFileA 的句柄

 Dim tFindData As WIN32_FIND_DATA '

 Dim strFileName As String '文件名

 On Error Resume Next

 '初始化变量

 i = 1

 iIndex = 0

 tFindData.cFileName = "" '初始化定长字符串

 lHandle = FindFirstFile(strPathName & "\*.*", tFindData)

 If lHandle = 0 Then '查询结束或发生错误

Exit Sub

End If

strFileName = fDelInvaildChr(tFindData.cFileName)

If tFindData.dwFileAttributes = &H10 Then '目录

 If strFileName <> "." And strFileName <> ".." Then

  iIndex = iIndex 1

  sSubDir(iIndex) = strPathName & "\" & strFileName '添加到目录数组

 End If

Else

 objList.AddItem strPathName & "\" & strFileName

End If

'循环查找下一个文件,直到结束

Do While True

 tFindData.cFileName = ""

 If FindNextFile(lHandle, tFindData) = 0 Then '查询结束或发生错误

  FindClose (lHandle)

  Exit Do

 Else

  strFileName = fDelInvaildChr(tFindData.cFileName)

  If tFindData.dwFileAttributes = &H10 Then

   If strFileName <> "." And strFileName <> ".." Then

    iIndex = iIndex 1

文章整理:西部数码--专业提供域名注册虚拟主机服务
http://www.west263.com
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!