谢谢!我试了下用多个like,但是还没搞定,那个这里:应该要对多个SearFile类型多重循环,但是我自己改的测试不对 For nI = 1 To nDirectory GetFileLoop = GetFileLoop(sDirectoryList(nI) & "\", SearFile) If GetFileLoop <> "" And mStop = True Then Exit For Next nI
递归部分不用改,只要改判定部分 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 只做一次。
A)每个条件单独搜索一次,然后合并结果。
B)整体用 *.* 条件遍历,对每个文件名进行多条件判断——可以用正则、也可以简单地循环用 Like 操作符判断。
http://blog.csdn.net/lyserver/article/details/4397098
For nI = 1 To nDirectory
GetFileLoop = GetFileLoop(sDirectoryList(nI) & "\", SearFile)
If GetFileLoop <> "" And mStop = True Then Exit For
Next nI
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 只做一次。