注意: 如果 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