dir函数语法详解

2025-01-02 09:10:54
推荐回答(1个)
回答1:

Dir 函数
语法:Dir[(pathname[, attributes])]
      两个参数都是可选的,attributes表示文件属性。
功能:返回一个文件名、目录名或文件夹名称,它必须与指定的模式或文件属性、或磁盘卷标相匹配。
说明:在第一次调用 Dir 函数时,必须指定 pathname,否则会产生错误。如果也指定了文件属性,那么就必须包括 pathname。
Dir 会返回匹配 pathname 的第一个文件名。若想得到其它匹配 pathname 的文件名,再一次调用 Dir,且不要使用参数。如果已没有合乎条件的文件,则 Dir 会返回一个零长度字符串 ("")。一旦返回值为零长度字符串,并要再次调用 Dir 时,就必须指定 pathname,否则会产生错误。不必访问到所有匹配当前 pathname 的文件名,就可以改变到一个新的 pathname 上。但是,不能以递归方式来调用 Dir 函数。以 vbDirectory 属性来调用 Dir 不能连续地返回子目录。
示例:
Debug.Print Dir("F:\TEST.xls")  ’返回"TEST.xls"
Debug.Print Dir("F:\*.xls")  ’返回按条件第一个找到的文件名。
Debug.Print Dir("F:\*.txt",vbReadOnly) ’返回第一个只读的txt文件
以下过程可显示C盘根目录下的所有目录.
Sub DirC()
MyPath = "c:\"  
MyName = dir(MyPath, vbDirectory)     ' 找寻第一项。
Do While MyName <> ""      ' 开始循环。
    ' 跳过当前的目录及上层目录。
    If MyName <> "." And MyName <> ".." Then
        ' 使用位比较来确定 MyName 代表一目录。
        If (GetAttr(MyPath & MyName) And vbDirectory) = vbDirectory Then
            Debug.Print MyName     ' 如果它是一个目录,将其名称显示出来。
        End If
    End If
    MyName = dir    ' 查找下一个目录。
Loop
End Sub
以下过程利用递归可以查找目录和子目录下的所有文件。
Public Sub FindFile(mPath As String, Optional sFile As String = "")
On Error Resume Next
Dim s As String, sDir() As String
Dim i As Long, d As Long
If Right(mPath, 1) <> "\" Then
    mPath = mPath & "\"
End If
'查找目录下的文件
s = dir(mPath & sFile, vbArchive + vbDirectory + vbHidden + vbNormal + vbReadOnly + vbSystem)
Do While s <> ""
   Debug.Print mPath & s
   s = dir
Loop
'查找目录下的子目录
s = dir(mPath, vbArchive + vbDirectory + vbHidden + vbNormal + vbReadOnly + vbSystem)
Do While s <> ""
    If s <> "." And s <> ".." Then
        If (GetAttr(mPath & s) And vbDirectory) = vbDirectory Then
        d = d + 1
        ReDim Preserve sDir(d)
        sDir(d) = mPath & s
        End If
    End If
    s = dir
Loop
'开始递归       
For i = 1 To d
    FindFile sDir(d) & "\"
Next
End Sub