注意
如果 Microsoft Jet 表达式服务在沙盒模式下运行,则本主题中描述的函数、方法、对象或属性将被禁用,这会阻止对潜在不安全表达式进行评估。 有关沙盒模式的详细信息,请在帮助中搜索“沙盒模式”。
返回表示与指定模式或文件属性匹配的文件、目录或文件夹的名称或驱动器的卷标签的 字符串 。
语法
Dir[ (pathname [, attributes] ) ]
Dir 函数语法具有以下参数:
| 参数 | 说明 |
|---|---|
| pathname | 可选。 指定文件名的字符串表达式 — 可能包括目录或文件夹和驱动器。 如果找不到 pathname ,则返回零长度字符串 (“”) 。 |
| 特性 | 可选。 常量或数字表达式,其总和指定文件属性。 如果忽略,则返回与 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 函数时指定路径名,否则将发生错误。 如果还指定文件属性,则必须包含 pathname 。
Dir 返回与 pathname 匹配的第一个文件名。 要获取与 pathname 匹配的任何其他文件名,请再次调用 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