本帖最后由 vvsuc189881 于 2012-02-15 20:04:20 编辑

解决方案 »

  1.   

    Dir() 函数只支持单个条件,如果要多条件,有两种方法:
    A)每个条件单独搜索一次,然后合并结果。
    B)整体用 *.* 条件遍历,对每个文件名进行多条件判断——可以用正则、也可以简单地循环用 Like 操作符判断。
      

  2.   

    用江南春这个:VB磁盘文件搜索引擎类(支持多条件)
    http://blog.csdn.net/lyserver/article/details/4397098
      

  3.   

    谢谢!我试了下用多个like,但是还没搞定,那个这里:应该要对多个SearFile类型多重循环,但是我自己改的测试不对
        For nI = 1 To nDirectory
             GetFileLoop = GetFileLoop(sDirectoryList(nI) & "\", SearFile)
             If GetFileLoop <> "" And mStop = True Then Exit For
        Next nI
      

  4.   

    递归部分不用改,只要改判定部分
    Private Function GetFileLoop(CurrentPath As String, ByVal SearFile As String, Optional ByVal mStop As Boolean = False) As String
        ...
        Do While sFileName <> ""
            'If UCase(sFileName) Like UCase(SearFile) Then <- 修改为
            If IsMatch(FileName, SearFile) Then
        ...
    End FunctionPrivate Function IsMatch(ByVal FileName As String, ByVal SearchPattern As String) As Boolean
        Dim aPatterns() As String
        Dim I As Long
        
        aPatterns = Split(SearchPattern, ";") '约定用分号连接多个条件,比如:*.txt;*旅游.*
        For I = 0 To UBound(aPatterns)
            If FileName Like aPatterns(I) Then
                IsMatch = True
                Exit Function
            End If
        Next
        
        IsMatch = False
    End Function
    最多优化一下,将 aPatterns() 变成模块级变量,让 Split 只做一次。
      

  5.   

    测试这个搜索还不错 挺快的,就是有时候搜索的文件夹大的话占用cpu会很高,有点可怕
      

  6.   

    还可以考虑调用MSScript.ocx里面VBSCript的正则表达式匹配功能。
      

  7.   

    遍历文件目录这是免不了的,反正现在都是多核CPU,程序最多只占用 1/n 的 CPU 资源。