;===============================================================================
;
; 描述: 列出目录下所有文件或文件夹,包括子文件夹.(注:autoit官方版本_FileListToArray不包括搜索子文件夹,也不支持正则表达式)
;
; 函数: myFileListToArray($sPath,$rPath=0, $iFlag = 0,$sPathExclude=0)
;
; 参数: $sPath = 要搜索的路径
; $iFlag = 决定只返回文件或只返回文件夹或都返回
; $iFlag=0(Default) 返回所有文件和文件夹
; $iFlag=1 仅返回文件
; $iFlag=2 仅返回文件夹
; $rPath = 用于搜索的正则表达式,用法同StringRegExp函数
; $sPathExclude = 在路径中要要排除的词语,多个有,分隔
;
; 最低版本需求: autoit v3.2.2.0
; 返回值: 成功 - 返回搜索路径中的文件和文件夹,以数组模式返回
; 失败 - 返回一个空的字串,如果没有查询到符合条件的文件或文件夹,设置@error值
; @Error=1 搜索路径不存在
; @Error=3 搜索类型错误
; @Error=4 未找到符合条件的文件(文件夹)
;
; 标注: 返回的数字的解释.
; $array[0] = 返回文件/文件夹的数量
; $array[1] = 第一个文件/文件夹
; $array[2] = 第二个文件/文件夹
; $array[3] = 第三个文件/文件夹
; $array[n] = 第四个文件/文件夹
; ......以下类推...
;===============================================================================
Func myFileListToArray($sPath, $rPath = 0, $iFlag = 0, $sPathExclude = 0)
Local $asFileList[1]
$asFileList = myFileListToArrayTemp($asFileList, $sPath, $rPath, $iFlag, $sPathExclude)
Return $asFileList
EndFunc
Func myFileListToArrayTemp(ByRef $asFileList, $sPath, $rPath = 0, $iFlag = 0, $sPathExclude = 0)
Local $hSearch, $sFile
If Not FileExists($sPath) Then Return SetError(1, 1, "")
If Not ($iFlag = 0 Or $iFlag = 1 Or $iFlag = 2) Then Return SetError(3, 3, "")
$hSearch = FileFindFirstFile($sPath & "\*")
If $hSearch = -1 Then Return SetError(4, 4, "")
While 1
$sFile = FileFindNextFile($hSearch)
If @error Then
SetError(0)
ExitLoop
EndIf
If $sPathExclude And StringLen($sPathExclude) > 0 Then $sPathExclude = StringSplit($sPathExclude, ",")
$bExclude = False
If IsArray($sPathExclude) Then
For $ii = 1 To $sPathExclude[0] Step 1
If StringInStr($sPath & "\" & $sFile, $sPathExclude[$ii]) Then
$bExclude = True
ExitLoop
EndIf
Next
EndIf
If $bExclude Then ContinueLoop
Select
Case StringInStr(FileGetAttrib($sPath & "\" & $sFile), "D")
Select
Case $iFlag = 1
myFileListToArrayTemp($asFileList, $sPath & "\" & $sFile, $rPath, $iFlag, $sPathExclude)
ContinueLoop
Case $iFlag = 2 Or $iFlag = 0
If $rPath Then
If Not StringRegExp($sPath & "\" & $sFile, $rPath, 0) Then
myFileListToArrayTemp($asFileList, $sPath & "\" & $sFile, $rPath, $iFlag, $sPathExclude)
ContinueLoop
Else
myFileListToArrayTemp($asFileList, $sPath & "\" & $sFile, $rPath, $iFlag, $sPathExclude)
EndIf
Else
myFileListToArrayTemp($asFileList, $sPath & "\" & $sFile, $rPath, $iFlag, $sPathExclude)
EndIf
EndSelect
Case Not StringInStr(FileGetAttrib($sPath & "\" & $sFile), "D")
If $iFlag = 2 Then ContinueLoop
If $rPath And Not StringRegExp($sPath & "\" & $sFile, $rPath, 0) Then ContinueLoop
EndSelect
ReDim $asFileList[UBound($asFileList) + 1]
$asFileList[0] = $asFileList[0] + 1
$asFileList[UBound($asFileList) - 1] = $sPath & "\" & $sFile
WEnd
FileClose($hSearch)
Return $asFileList
EndFunc
|