Dir 函数

应用对象
Microsoft 365 专属 Access Access 2024 Access 2021 Access 2019 Access 2016

注意

如果 Microsoft Jet 表达式服务在沙盒模式下运行,则禁用本主题中所述的函数、方法、对象或属性,从而阻止计算潜在的不安全表达式。 有关沙盒模式的详细信息,请在“帮助”中搜索“沙盒模式”。

返回一个 String 类型的 值,表示与指定的模式或文件属性匹配的文件、目录或文件夹的名称,或者驱动器的卷标签。

语法

Dir[ (pathname [, attributes] ) ]

Dir 函数语法具有以下参数:

参数 说明
路径 可选。 指定文件名的字符串表达式包括目录、文件夹和驱动器。 如果未找到 pathname ,则返回零长度字符串 (“”) 。
属性 可选。 常量或数值表达式,其和指定文件属性。 如果省略,则返回与 路径名 匹配但没有属性的文件。

    

“设置”

属性参数设置包括:

不断 说明
vbNormal 0 (默认) 指定没有属性的文件。
vbReadOnly 1 除了没有属性的文件之外,还指定只读文件。
vbHidden 2 除了没有属性的文件之外,还指定隐藏文件。
VbSystem 4 除了没有属性的文件之外,还指定系统文件。 在 Macintosh 上不可用。
vbVolume 8 指定卷标签;如果指定了任何其他特性化,则忽略 vbVolume 。 在 Macintosh 上不可用。
vbDirectory 16 除了没有属性的文件外,还指定目录或文件夹。
vbAlias 64 指定的文件名是别名。 仅在 Macintosh 上可用。

    

注意

这些常量由 Visual Basic for Applications (VBA) 指定,可在代码中的任何位置使用,以代替实际值。

备注

在 Microsoft Windows 中, Dir 支持使用多字符 (*) 和单字符 () 通配符来指定多个文件。 在 Macintosh 上,这些字符被视为有效的文件名字符,不能用作指定多个文件的通配符。

由于 Macintosh 不支持通配符,请使用文件类型来标识文件组。 可以使用 MacID 函数指定文件类型,而不是使用文件名。 例如,以下语句返回当前文件夹中第一个 TEXT 文件的名称:

Dir("SomePath", MacID("TEXT"))

若要循环访问文件夹中的所有文件,请指定一个空字符串:

Dir("")

如果在 Windows 中将 MacID 函数与 Dir 配合使用,则会发生错误。

任何大于 256 的属性 值都被视为 MacID 值。

首次调用 Dir 函数时必须指定路径名,否则会发生错误。 如果还指定了文件属性,则必须包含 路径名

Dir 返回与 路径名匹配的第一个文件名。 若要获取与 路径名匹配的任何其他文件名,请再次调用 Dir ,不带参数。 如果不再匹配文件名, Dir 将返回零长度字符串 (“”) 。 返回零长度字符串后,必须在后续调用中指定 路径名 ,否则会发生错误。 可以更改为新 路径名 ,而无需检索与当前 路径名匹配的所有文件名。 但是,不能递归调用 Dir 函数。 使用 vbDirectory 属性调用 Dir 不会持续返回子目录。

提示 由于文件名不按特定顺序检索,因此可能需要将返回的文件名存储在数组中,然后对数组进行排序。

示例

注意

下面的示例演示了如何在 Visual Basic for Applications (VBA) 模块中使用此函数。 有关使用 VBA 的详细信息,请在搜索旁边的下拉列表中选择“开发人员参考”,并在搜索框中输入一个或多个术语。

此示例使用 Dir 函数检查是否存在某些文件和目录。 在 Macintosh 上,“HD:”是默认驱动器名称,路径名的部分由冒号而不是反斜杠分隔。 此外,Windows 通配符被视为 Macintosh 上的有效文件名字符。 但是,可以使用 MacID 函数指定文件组。

Dim MyFile, MyPath, MyName
' Returns "WIN.INI" (on Microsoft Windows) if it exists.
MyFile = Dir("C:\WINDOWS\WIN.INI")    
' Returns filename with specified extension. If more than one *.ini
' file exists, the first file found is returned.
MyFile = Dir("C:\WINDOWS\*.INI")
' Call Dir again without arguments to return the next *.INI file in the 
' same directory.
MyFile = Dir
' Return first *.TXT file with a set hidden attribute.
MyFile = Dir("*.TXT", vbHidden)
' Display the names in C:\ that represent directories.
MyPath = "c:\"    ' Set the path.
MyName = Dir(MyPath, vbDirectory)    ' Retrieve the first entry.
Do While MyName <> ""    ' Start the loop.
    ' Ignore the current directory and the encompassing directory.
    If MyName <> "." And MyName <> ".." Then
        ' Use bitwise comparison to make sure MyName is a directory.
        If (GetAttr(MyPath & MyName) And vbDirectory) = vbDirectory Then
            Debug.Print MyName    ' Display entry only if it
        End If    ' it represents a directory.
    End If
    MyName = Dir    ' Get next entry.
Loop