Visual Basic6.0中Dir()函数的使用方法


  VB中提供的成员函数dir返回一个满足指定类型或指定文件属性的文件名,目录名或卷标名 。dir函数的语法 构造为:

Member Function Dir[(Pathname[,attributes])] As String

  其中参数Pathname通常为一个文件名,此文件名 可以包括目录或文件夹以及驱动器符号,假如没有找到指定的Pathname,dir语句将返回一个零长度的字符串(""), 支撑多字符通配符和单字符通配符 。需求 留神的是:

  1.在程序中第一次调用dir函数时必须指明pathname参数,不然会产生运行 舛误;

  2.dir函数只返回满足pathname条件的第一个文件名或目录名,要得到其余满足条件的文件名, 可以再次调用dir函数而不用带参数,当没有匹配的文件,dir函数返回零长度的字符串,而此时假如再想调用dir函数,必须指定pathname参数,不然浮现运行 舛误;

  3.在没有检索到满足目前pathname匹配条件的文件时 可以转变新的pathname值,但不能再次递归调用dir函数;

  4.调用dir函数时将属性参数设置为vbdirectory并不能延续返回子目录,仅返回目前目录下的目录 。

  

  例1

Public Sub main()

Dim filenames As String

filenames = Dir("c:\", vbNormal + vbDirectory)

Do While filenames <> ""

Debug.Print filenames

filenames = Dir ’再次调用dir函数,此时 可以不带参数

Loop

End Sub

  例2

’将 相符条件的条件和目录分类,存到对应的数组中, 实现输出

Public Sub main()

 Dim FileNames As String, DirNames As String

 Dim FileArray() As String, DirArray() As String

 Dim TotalDirs As Integer, TotalFiles As Integer

 Dim iLoop As Integer

 DirNames = "c:\"

 FileNames = Dir(Dirname, vbNormal + vbDirectory)

 Do While FileNames <> ""

  If FileNames <> "." And FileNames <> ".." Then

   If (GetAttr(Dirname & FileNames) And vbDirectory) = vbDirectory Then

    TotalDirs = TotalDirs + 1

    ReDim Preserve DirArray(TotalDirs)

    DirArray(TotalDirs) = FileNames

   Else

    TotalFiles = TotalFiles + 1

    ReDim Preserve FileArray(TotalFiles)

    FileArray(TotalFiles) = FileNames

   End If

  End If

  FileNames = Dir

 Loop

 ’这里可对数组进行排序,此处略

 Debug.Print "___Directories______"

 For iLoop = 0 To UBound(DirArray)

  Debug.Print DirArray(iLoop)

 Next

 Debug.Print "___Files____"

 For iLoop = 0 To UBound(FileArray)

  Debug.Print FileArray(iLoop)

 Next

End Sub

  Dir函数 可以用在不确定本机是不是存在某文件或目录的前提下 后盾协助消费者寻觅并 揭示, 而后 使用该文件或目录 实现指定操作,如run等 。然而因为不能递归 使用,这就 象征着不能一次搜索整棵树,更为 蹩脚的是,vb并没有提供用来在多个不知名的目录中搜索某一给定的文件或文件簇的任何工具 。 厄运的win32api提供了一些文件搜索的 步骤

(SearchPath,FindFirstFile,FindNextFile等),此外还可利用已有的文件搜索 常识为消费者 缔造一个listbox控件,用来显示所搜索到的文件,以便消费者能选中其一 。