在文件系统中搜索并返回有关项目的信息;执行目录搜索
语法
用法
result = Dir( item_spec , [ attrib_mask ], out_attrib ] )
result = Dir( item_spec [, [ attrib_mask ] [, p_out_attrib ] ] )
result = Dir( out_attrib )
result = Dir( [ p_out_attrib ] )
参数
item_spec
匹配项目名称的模式。
attrib_mask
匹配项目属性的位掩码。
out_attrib
引用一个位掩码,赋值每个找到的项的属性(如果有的话)。
p_out_attrib
指向赋值每个找到的项目属性的位掩码(如果有的话)。
返回值
如果没有匹配名称item_spec 或属性掩码attrib_mask 的项目,则out_attrib (或*p_out_attrib )被赋值为零,并返回一个空字符串。否则,out_attrib (或*p_out_attrib )被赋予项目的属性掩码,并且返回没有路径的项目名称。
说明
如果
item_spec 包含绝对路径,则第一个过程会在文件系统中搜索与
item_spec 名称匹配的项目,其属性全部包含在
attrib_mask 中。否则,它将搜索当前目录(参见
CurDir)。在任何情况下,如果未找到匹配的项目,则将
out_attrib 赋值给零,并返回一个空字符串。否则,将为
out_attrib 赋值项目的属性标志,并返回没有路径的项目的名称。
item_spec 可能包括一个星号(
*,用于匹配任何相邻字符)或一个或多个问号(
?,用于匹配任何单个字符)。如果是,则该过程将搜索第一个此类项目。如果找到,则忽略
item_spec 的后续调用或设置为空字符串,将返回与名称
item_spec 匹配的下一个项目,直到找不到更多这样的项目。如果从这些后续调用中省略
attrib_mask ,则该过程将搜索具有与上一次调用相同属性的项目。
第二种语法与
Dir( item_spec , attrib_mask , *p_out_attrib )相同。
第三种语法与
Dir( "", , out_attrib )相同。
第四种语法与
Dir( "", , *p_out_attrib )相同。
文件属性:文件和目录等项目可以说具有所谓的文件属性;描述项目的元数据。此元数据的含义可能因操作系统及其使用的文件系统而异。
以下定义的常量用作
attrib_mask 和
out_attrib 或
*p_out_attrib 中的位标志。它们的值可以组合使用
操作符 Or形成掩码。这些值是返回的文件
允许具有的元数据。例如,
fbDirectory将仅允许不设置目录属性,这意味着只有没有设置其他属性的文件或目录才能匹配。
(fbReadOnly Or fbDirectory)将允许只读目录和文件以及可写目录和文件。
通过使用
操作符 And检查返回的
out_attrib 的特定标志,可以实现更强大的过滤。要访问定义的标志,您必须
#include "dir.bi".
# define fbReadOnly &h01
The item cannot be written to or deleted.
DOS和Windows:项目具有“只读”属性集。
Linux的:该项目没有与当前用户或组相关联的写入权限,也不是全局可写的。(是否忽略用户具有root用户权限。)
# define fbHidden &h02
The item is hidden in ordinary directory listings.
DOS和Windows:项目具有“隐藏”属性集。
Linux的:项目的名称具有句点(.)作为第一个字符。
# define fbSystem &h04
The item is used almost exclusively by the system.
DOS和Windows:项目的“系统”属性设置。
Linux的:该项目是字符设备,块设备,命名管道(FIFO)或Unix套接字。
# define fbDirectory &h10
The item is a directory. Includes the current (.) and parent (..) directories as well.
DOS和Windows和Linux:该项目是一个目录。
# define fbArchive &h20
The item may be backed up after some automated operations.
DOS和Windows:项目具有“archive”属性集(在对文件进行每次写入访问后自动设置)。
Linux的:项目不是目录;典型的文件系统不支持此元数据。
# define fbNormal (fbReadOnly or fbArchive) The item is read-only or "archived".
(如果
attrib_mask 不包含
fbArchive,则
Dir可能会扩大支票以包含
fbDirectory,但建议添加
fbDirectory,如果这是所寻求的行为。)
找不到任何属性的项目
总是匹配,无论
attrib_mask 的值如何。如果一个项目在
attrib_mask 中没有指定一个或多个属性,则该项目将不匹配。例如,
fbArchive Or fbDirectory 将与归档文件,归档目录,非归档文件和非归档目录匹配。它不会与例如只读文件匹配。
一般来说,不可能使用
attrib_mask 在包含具有一组属性的文件/文件夹中包含不同集合的文件/文件夹。例如,不排除只读文件扫描只读目录(除非文件还有其他属性)。通过检查所需属性集合的
out_attrib 值可以获得更精确的控制。
例子
#include "dir.bi" 'provides constants to use for the attrib_mask parameter
Sub list_files (ByRef filespec As String, ByVal attrib As Integer)
Dim As String filename = Dir(filespec, attrib) '使用指定的filespec / attrib启动文件搜索* AND *获取第一个文件名。
Do While Len(filename) > 0 '如果len(filename)为0,则退出循环:不再有文件名被读取。
Print filename
filename = Dir()
Loop
End Sub
Print "目录:"
list_files "*", fbDirectory
Print
Print "归档文件:"
list_files "*", fbArchive
例子
''使用DIR功能和检索属性的示例
#include "dir.bi" '' provides constants to match the attributes against
''设置输入属性掩码以允许正常,隐藏,系统或目录的文件
Const attrib_mask = fbNormal Or fbHidden Or fbSystem Or fbDirectory '= &h37
Dim As UInteger out_attr ''无符号整数来保存检索的属性
Dim As String fname ''文件/目录名返回
Dim As Integer filecount, dircount
fname = Dir("*.*", attrib_mask, out_attr) ''根据提供的文件规范和属性掩码获取第一个文件名/属性
Print "文件列表" & CurDir & ":"
Do Until Len(fname) = 0 ''循环直到Dir返回空字符串
If (fname <> ".") And (fname <> "..") Then ''忽略当前和父目录条目
Print fname,
If (out_attr And fbDirectory) <> 0 Then
Print "- 目录";
dircount += 1
Else
Print " - 文件";
filecount += 1
End If
If (out_attr And fbReadOnly) <> 0 Then Print ", 只读";
If (out_attr And fbHidden) <> 0 Then Print ",隐藏";
If (out_attr And fbSystem) <> 0 Then Print ",系统";
If (out_attr And fbArchive) <> 0 Then Print ",存档";
Print
End If
fname = Dir(out_attr) ''找到下一个名字/属性
Loop
Print
Print "发现" & filecount & "文件和" & dircount & "子目录"
平台差异
- Linux需要filename 的情况才能匹配文件的真实名称。Windows和DOS不区分大小写。
- Linux中的路径分隔符是正斜杠/ .Windows使用反斜杠\\ ,但它允许正斜杠。DOS使用反斜杠。
- 在DOS中,&h37 (&h3F 的属性掩码值通常也有效,但&h37 更安全)返回所有文件和目录,包括“”。和“..”,但没有卷:值8 返回卷,即使当前目录不是主目录。
方言差异
与QB差别
- 在QBasic中找不到但在Visual Basic中存在。out_attrib 参数是FreeBASIC的新功能。
参考