VB中提供的成员函数dir返回一个满足指定类型或指定文件属性的文件名,目录名或卷标名。dir函数的语法结构为:
Member Function Dir[(Pathname[,attributes])] As String |
其中参数Pathname通常为一个文件名,此文件名可以包含目录或文件夹以及驱动器符号,如果没有找到指定的Pathname,dir语句将返回一个零长度的字符串(""),支持多字符通配符和单字符通配符。需要注意的是:
1.在程序中第一次调用dir函数时必须指明pathname参数,否则会产生运行错误;
2.dir函数只返回满足pathname条件的第一个文件名或目录名,要得到其余满足条件的文件名,可以再次调用dir函数而不用带参数,当没有匹配的文件,dir函数返回零长度的字符串,而此时如果再想调用dir函数,必须指定pathname参数,否则出现运行错误;
3.在没有检索到满足当前pathname匹配条件的文件时可以改变新的pathname值,但不能再次递归调用dir函数;
4.调用dir函数时将属性参数设置为vbdirectory并不能连续返回子目录,仅返回当前目录下的目录。
例1
Public Sub main()
Dim filenames As String filenames = Dir("c:\", vbNormal + vbDirectory) Do While filenames <> "" Debug.Print filenames filenames = Dir ’再次调用dir函数,此时可以不带参数 Loop End Sub |
例2
’将符合条件的条件和目录分类,存到对应的数组中,完成输出
Public Sub main() Dim FileNames As String, DirNames As String Dim FileArray() As String, Dirarray() As String Dim TotalDirs As Integer, TotalFiles As Integer Dim iLoop As Integer DirNames = "c:\" FileNames = Dir(Dirname, vbNormal + vbDirectory) Do While FileNames <> "" If FileNames <> "." And FileNames <> ".." Then If (GetAttr(Dirname & FileNames) And vbDirectory) = vbDirectory Then TotalDirs = TotalDirs + 1 ReDim Preserve DirArray(TotalDirs) DirArray(TotalDirs) = FileNames Else TotalFiles = TotalFiles + 1 ReDim Preserve FileArray(TotalFiles) FileArray(TotalFiles) = FileNames End If End If FileNames = Dir Loop ’这里可对数组进行排序,此处略 Debug.Print "___Directories______" For iLoop = 0 To UBound(DirArray) Debug.Print DirArray(iLoop) Next Debug.Print "___Files____" For iLoop = 0 To UBound(FileArray) Debug.Print FileArray(iLoop) Next End Sub |
Dir函数可以用在不确定本机是否存在某文件或目录的前提下后台帮助用户寻找并提示,然后运用该文件或目录完成指定操作,如run等。但是由于不能递归使用,这就意味着不能一次查找整棵树,更为糟糕的是,vb并没有提供用来在多个不知名的目录中查找某一给定的文件或文件簇的任何工具。幸运的win32api提供了一些文件查找的方法
(SearchPath,FindFirstFile,FindNextFile等),此外还可利用已有的文件查找知识为用户创建一个listbox控件,用来显示所查找到的文件,以便用户能选中其一。