Info Posted February 15, 2010 Share Posted February 15, 2010 #include <File.au3> $aFirst = _FileListToArray("C:\Program Files\") $s = "" _Run($aFirst) Func _Run($a) For $i = 1 To UBound($a) - 1 $s = $s & $a[$i] & @CRLF $files = _FileListToArray($a[$i]) If Not @error Then _Run($files) Next EndFunc ;==>_Run MsgBox(0,"",$s) It's supposed to show me something like AutoIt *files in Autoit* Internet Explorer *files in internet explorer*but it doesn't Link to comment Share on other sites More sharing options...
Moderators Melba23 Posted February 15, 2010 Moderators Share Posted February 15, 2010 Info,There a number of excellent recursive file listers on the forum. So far every good one I have seen has used FileFindFirstFile and FileFindNextFile rather than _FileListToArray.For one thing, when you use these commands, @extended tells you whether you have found a file or a folder - which makes life a lot easier! Another advantage is that you can very simply avoid recursion (a function calling itself) - which is always a good thing in my book as recursion can very quickly get extremely messy unless you know exactly what you are doing. So please excuse me if I do not try and debug your script. As a consolation, here is my version of a recursive file lister, which offers a fair range of options (multiple filters for both include and excluse, sorting, addition of path information, etc):expandcollapse popup#include-once ;#AutoIt3Wrapper_au3check_parameters=-d -w 1 -w 2 -w 3 -w 4 -w 5 -w 6 ; #INDEX# ======================================================================================================================= ; Title .........: _RecFileListToArray ; AutoIt Version : v3.3.1.1 or higher ; Language ......: English ; Description ...: Lists files and\or folders in a specified path with optional recursion and sort. ; Remarks .......: ; Note ..........: ; Author(s) .....: Melba23 ; Remark ........: Modified Array.au3 functions - credit: Jos van der Zande, LazyCoder, Tylo, Ultima, SolidSnake and gcriaco ; =============================================================================================================================== ; #CURRENT# ===================================================================================================================== ; _RecFileListToArray: Lists files and\or folders in a specified path with optional recursion and sort. ; =============================================================================================================================== ; #INTERNAL_USE_ONLY#============================================================================================================ ; _RFLTA_AddFileLists ....; Add element to list which is resized if necessary ; _RFLTA_AddToList .......; Add internal arrays after resizing and optional sorting ; _RFLTA_ArraySearch .....; Search array for partial match ; _RFLTA_ArraySort .......; Wrapper for QuickSort function ; _RFLTA_QuickSort .......: Recursive array sort ; _RFLTA_ArrayConcatenate : Join 2 arrays ; _RFLTA_ArrayInsert .....: Insert element into array ; =============================================================================================================================== ; #FUNCTION# ==================================================================================================================== ; Name...........: _RecFileListToArray ; Description ...: Lists files and\or folders in a specified path with optional recursion and sort. Compatible with existing _FileListToArray syntax ; Syntax.........: _RecFileListToArray($sPath[, $sInclude_List = "*"[, $iReturn = 0[, $fRecur = 0[, $fSort = 0[, $sReturnPath = 1[, $sExclude_List = ""]]]]]]) ; Parameters ....: $sPath - Initial path used to generate filelist. If path ends in \ then folders will be returned with an ending \ ; $sInclude_List - Optional: the filter for included results (default is "*"). Multiple filters must be separated by ";" ; $iReturn - Optional: specifies whether to return files, folders or both ; |$iReturn = 0 (Default) Return both files and folders ; |$iReturn = 1 Return files only ; |$iReturn = 2 Return folders only ; $fRecur - Optional: specifies whether to search recursively in subfolders ; |$fRecur = 0 (Default) Do not search in subfolders ; |$fRecur = 1 Search in subfolders ; $fSort - Optional: sort ordered in alphabetical and depth order ; |$fSort = 0 (Default) Not sorted ; |$fSort = 1 Sorted ; $sReturnPath - Optional: specifies displayed path of results ; |$sReturnPath = 0 File/folder name only ; |$sReturnPath = 1 (Default) Initial path not included ; |$sReturnPath = 2 Initial path included ; $sExclude_List - Optional: the filter for excluded results (default is ""). Multiple filters must be separated by ";" ; Requirement(s).: v3.3.1.1 or higher ; Return values .: Success: One-dimensional array made up as follows: ; |$array[0] = Number of Files\Folders returned ; |$array[1] = 1st File\Folder ; |$array[2] = 2nd File\Folder ; |... ; |$array[n] = nth File\Folder ; Failure: Null string and @error = 1 with @extended set as follows: ; |1 = Path not found or invalid ; |2 = Invalid $sInclude_List ; |3 = Invalid $iReturn ; |4 = Invalid $fRecur ; |5 = Invalid $fSort ; |6 = Invalid $iFullPath ; |7 = Invalid $sExclude_List ; |8 = No files/folders found ; Author ........: Melba23 using SRE code from forums ; Remarks .......: ; Related .......: ; Link ..........; ; Example .......; Yes ; =============================================================================================================================== Func _RecFileListToArray($sInitialPath, $sInclude_List = "*", $iReturn = 0, $fRecur = 0, $fSort = 0, $sReturnPath = 1, $sExclude_List = "") Local $asReturnList[100] = [0], $asFileMatchList[100] = [0], $asRootFileMatchList[100] = [0], $asFolderMatchList[100] = [0], $asFolderList[100] = [1] Local $sFolderSlash = "", $sInclude_List_Mask, $sExclude_List_Mask, $hSearch, $fFolder, $sRetPath = "", $sCurrentPath, $sName ; Check valid path If Not FileExists($sInitialPath) Then Return SetError(1, 1, "") ; Check if folders should have trailing \ and ensure that $sInitialPath does have one If StringRight($sInitialPath, 1) = "\" Then $sFolderSlash = "\" Else $sInitialPath = $sInitialPath & "\" EndIf ; Add path to folder list $asFolderList[1] = $sInitialPath ; Determine Filter mask for SRE check If $sInclude_List = "*" Then $sInclude_List_Mask = ".+" ; Set mask to exclude base folder with NULL name Else If StringRegExp($sInclude_List, "\\|/|:|\<|\>|\|") Then Return SetError(1, 2, "") ; Check For invalid characters within $sInclude_List $sInclude_List = StringReplace(StringStripWS(StringRegExpReplace($sInclude_List, "\s*;\s*", ";"), 3), ";", "|") ; Strip WS and insert | for ; $sInclude_List_Mask = "(?i)^" & StringReplace(StringReplace(StringReplace($sInclude_List, ".", "\."), "*", ".*"), "?", ".") & "\z" ; Convert SRE pattern EndIf ; Determine Exclude mask for SRE check If $sExclude_List = "" Then $sExclude_List_Mask = ":" ; Set unmatchable mask Else If StringRegExp($sExclude_List, "\\|/|:|\<|\>|\|") Then Return SetError(1, 7, "") ; Check For invalid characters within $sInclude_List $sExclude_List = StringReplace(StringStripWS(StringRegExpReplace($sExclude_List, "\s*;\s*", ";"), 3), ";", "|") ; Strip WS and insert | for ; $sExclude_List_Mask = "(?i)^" & StringReplace(StringReplace(StringReplace($sExclude_List, ".", "\."), "*", ".*"), "?", ".") & "\z" ; Convert $sExclude_List to SRE pattern EndIf ; Verify other parameter values If Not ($iReturn = 0 Or $iReturn = 1 Or $iReturn = 2) Then Return SetError(1, 3, "") If Not ($fRecur = 0 Or $fRecur = 1) Then Return SetError(1, 4, "") If Not ($fSort = 0 Or $fSort = 1) Then Return SetError(1, 5, "") If Not ($sReturnPath = 0 Or $sReturnPath = 1 Or $sReturnPath = 2) Then Return SetError(1, 6, "") ; Search in listed folders While $asFolderList[0] > 0 ; Set path to search $sCurrentPath = $asFolderList[$asFolderList[0]] ; Reduce folder array count $asFolderList[0] -= 1 ; Determine return path to add to file/folder name Switch $sReturnPath ; Case 0 ; Name only ; Leave as "" Case 1 ; Initial path not included $sRetPath = StringReplace($sCurrentPath, $sInitialPath, "") Case 2 ; Initial path included $sRetPath = $sCurrentPath EndSwitch If $fSort Then ; Get folder name $sName = StringRegExpReplace(StringReplace($sCurrentPath, $sInitialPath, ""), "(.+?\\)*(.+?)(\\.*?(?!\\))", "$2") ; Get search handle $hSearch = FileFindFirstFile($sCurrentPath & "*") ; If folder empty move to next in list If $hSearch = -1 Then ContinueLoop ; Search folder While 1 $sName = FileFindNextFile($hSearch) ; Check for end of folder If @error Then ExitLoop ; Check for file - @extended set for subfolder in 3.3.1.1 + If @extended Then ; If recursive search, add subfolder to folder list If $fRecur Then _RFLTA_AddToList($asFolderList, $sCurrentPath & $sName & "\") ; Add folder name if matched against Include/Exclude masks If StringRegExp($sName, $sInclude_List_Mask) And Not StringRegExp($sName, $sExclude_List_Mask) Then _ _RFLTA_AddToList($asFolderMatchList, $sRetPath & $sName & $sFolderSlash) Else ; Add file name if matched against Include/Exclude masks If StringRegExp($sName, $sInclude_List_Mask) And Not StringRegExp($sName, $sExclude_List_Mask) Then If $sCurrentPath = $sInitialPath Then _RFLTA_AddToList($asRootFileMatchList, $sRetPath & $sName) Else _RFLTA_AddToList($asFileMatchList, $sRetPath & $sName) EndIf EndIf EndIf WEnd ; Close current search FileClose($hSearch) Else ; No sorting required ; Get search handle $hSearch = FileFindFirstFile($sCurrentPath & "*") ; If folder empty move to next in list If $hSearch = -1 Then ContinueLoop ; Search folder While 1 $sName = FileFindNextFile($hSearch) ; Check for end of folder If @error Then ExitLoop ; Check for subfolder - @extended set in 3.3.1.1 + $fFolder = @extended ; If recursive search, add subfolder to folder list If $fRecur And $fFolder Then _RFLTA_AddToList($asFolderList, $sCurrentPath & $sName & "\") ; Check file/folder type against required return value and file/folder name against Include/Exclude masks If $fFolder + $iReturn <> 2 And StringRegExp($sName, $sInclude_List_Mask) And Not StringRegExp($sName, $sExclude_List_Mask) Then ; Add final "\" to folders If $fFolder Then $sName &= $sFolderSlash _RFLTA_AddToList($asReturnList, $sRetPath & $sName) EndIf WEnd ; Close current search FileClose($hSearch) EndIf WEnd If $fSort Then ; Check if any file/folders have been added If $asRootFileMatchList[0] = 0 And $asFileMatchList[0] = 0 And $asFolderMatchList[0] = 0 Then Return SetError(1, 8, "") Switch $iReturn Case 2 ; Folders only ; Correctly size folder match list ReDim $asFolderMatchList[$asFolderMatchList[0] + 1] ; Copy size folder match array $asReturnList = $asFolderMatchList ; Simple sort list _RFLTA_ArraySort($asReturnList) Case 1 ; Files only If $sReturnPath = 0 Then ; names only so simple sort suffices ; Combine file match lists _RFLTA_AddFileLists($asReturnList, $asRootFileMatchList, $asFileMatchList) ; Simple sort combined file list _RFLTA_ArraySort($asReturnList) Else ; Combine sorted file match lists _RFLTA_AddFileLists($asReturnList, $asRootFileMatchList, $asFileMatchList, 1) EndIf Case 0 ; Both files and folders If $sReturnPath = 0 Then ; names only so simple sort suffices ; Combine file match lists _RFLTA_AddFileLists($asReturnList, $asRootFileMatchList, $asFileMatchList) ; Set correct count for folder add $asReturnList[0] += $asFolderMatchList[0] ; Resize and add file match array ReDim $asFolderMatchList[$asFolderMatchList[0] + 1] _RFLTA_ArrayConcatenate($asReturnList, $asFolderMatchList) ; Simple sort final list _RFLTA_ArraySort($asReturnList) Else ; Combine sorted file match lists _RFLTA_AddFileLists($asReturnList, $asRootFileMatchList, $asFileMatchList, 1) ; Add folder count $asReturnList[0] += $asFolderMatchList[0] ; Sort folder match list ReDim $asFolderMatchList[$asFolderMatchList[0] + 1] _RFLTA_ArraySort($asFolderMatchList) ; Now add folders in correct place Local $iLastIndex = $asReturnList[0] For $i = $asFolderMatchList[0] To 1 Step -1 ; Find first filename containing folder name Local $iIndex = _RFLTA_ArraySearch($asReturnList, $asFolderMatchList[$i]) If $iIndex = -1 Then ; Empty folder so insert immediately above previous _RFLTA_ArrayInsert($asReturnList, $iLastIndex, $asFolderMatchList[$i]) Else ; Insert folder at correct point above files _RFLTA_ArrayInsert($asReturnList, $iIndex, $asFolderMatchList[$i]) $iLastIndex = $iIndex EndIf Next EndIf EndSwitch Else ; No sort ; Check if any file/folders have been added If $asReturnList[0] = 0 Then Return SetError(1, 8, "") ; Remove any unused return list elements from last ReDim ReDim $asReturnList[$asReturnList[0] + 1] EndIf Return $asReturnList EndFunc ;==>_RecFileListToArray ; #INTERNAL_USE_ONLY#============================================================================================================ ; Name...........: _RFLTA_AddToList ; Description ...: Add element to list which is resized if necessary ; Syntax ........: _RFLTA_AddToList(ByRef $asList, $sValue) ; Parameters ....: $asList - List to be added to ; $sValue - Value to add ; Return values .: None - array modified ByRef ; Author ........: Melba23 ; Remarks .......: This function is used internally by _RecFileListToArray ; =============================================================================================================================== Func _RFLTA_AddToList(ByRef $asList, $sValue) ; Increase list count $asList[0] += 1 ; Double list size if too small (fewer ReDim needed) If UBound($asList) <= $asList[0] Then ReDim $asList[UBound($asList) * 2] ; Add value $asList[$asList[0]] = $sValue EndFunc ;==>_RFLTA_AddToList ; #INTERNAL_USE_ONLY#============================================================================================================ ; Name...........: _RFLTA_AddFileLists ; Description ...: Add internal arrays after resizing and optional sorting ; Syntax ........: _RFLTA_AddFileLists(ByRef $asReturnList, $asRootFileMatchList, $asFileMatchList[, $iSort = 0]) ; Parameters ....: $asReturnList - Base list ; $asRootFileMatchList - First list to add ; $asFileMatchList - Second list to add ; $iSort - (Optional) Whether to sort lists before adding ; |$iSort = 0 (Default) No sort ; |$iSort = 1 Sort in descending alphabetical order ; Return values .: None - array modified ByRef ; Author ........: Melba23 ; Remarks .......: This function is used internally by _RecFileListToArray ; =============================================================================================================================== Func _RFLTA_AddFileLists(ByRef $asReturnList, $asRootFileMatchList, $asFileMatchList, $iSort = 0) ; Correctly size root file match array ReDim $asRootFileMatchList[$asRootFileMatchList[0] + 1] ; Simple sort root file match array if required If $iSort = 1 Then _RFLTA_ArraySort($asRootFileMatchList) ; Copy root file match array $asReturnList = $asRootFileMatchList ; Add file match count $asReturnList[0] += $asFileMatchList[0] ; Correctly size file match array ReDim $asFileMatchList[$asFileMatchList[0] + 1] ; Simple sort file match array if required If $iSort = 1 Then _RFLTA_ArraySort($asFileMatchList) ; Add file match array _RFLTA_ArrayConcatenate($asReturnList, $asFileMatchList) EndFunc ;==>_RFLTA_AddFileLists ; #INTERNAL_USE_ONLY#============================================================================================================ ; Name...........: _RFLTA_ArraySearch ; Description ...: Search array downwards for partial match ; Syntax ........: _RFLTA_ArraySearch(Const ByRef $avArray, $vValue) ; Parameters ....: $avArray - Array to search ; $vValue - PValue to search for ; Return values .: Success: Index of array in which element was found ; Failure: returns -1 ; Author ........: SolidSnake, gcriaco, Ultima ; Modified.......: Melba23 ; Remarks .......: This function is used internally by _RecFileListToArray ; =============================================================================================================================== Func _RFLTA_ArraySearch(Const ByRef $avArray, $vValue) For $i = 1 To UBound($avArray) - 1 If StringInStr($avArray[$i], $vValue) > 0 Then Return $i Next Return -1 EndFunc ;==>_RFLTA_ArraySearch ; #INTERNAL_USE_ONLY#============================================================================================================ ; Name...........: _RFLTA_ArraySort ; Description ...: Wrapper for QuickSort function ; Syntax ........: _RFLTA_ArraySort(ByRef $avArray) ; Parameters ....: $avArray - Array to sort ; $pNew_WindowProc - Pointer to new WindowProc ; Return values .: None - array modified ByRef ; Author ........: Jos van der Zande, LazyCoder, Tylo, Ultima ; Modified.......: Melba23 ; Remarks .......: This function is used internally by _RecFileListToArray ; =============================================================================================================================== Func _RFLTA_ArraySort(ByRef $avArray) Local $iStart = 1, $iEnd = UBound($avArray) - 1 _RFLTA_QuickSort($avArray, $iStart, $iEnd) EndFunc ;==>_RFLTA_ArraySort ; #INTERNAL_USE_ONLY#============================================================================================================ ; Name...........: _RFLTA_QuickSort ; Description ...: Recursive array sort ; Syntax ........: _RFLTA_QuickSort(ByRef $avArray, ByRef $iStart, ByRef $iEnd) ; Parameters ....: $avArray - Array to sort in descending alphabetical order ; $iStart - Start index ; $iEnd - End index ; Return values .: None - array modified ByRef ; Author ........: Jos van der Zande, LazyCoder, Tylo, Ultima ; Modified.......: Melba23 ; Remarks .......: This function is used internally by _RFLTA_ArraySort ; =============================================================================================================================== Func _RFLTA_QuickSort(ByRef $avArray, ByRef $iStart, ByRef $iEnd) Local $vTmp If ($iEnd - $iStart) < 15 Then Local $i, $j, $vCur For $i = $iStart + 1 To $iEnd $vTmp = $avArray[$i] If IsNumber($vTmp) Then For $j = $i - 1 To $iStart Step -1 $vCur = $avArray[$j] If ($vTmp >= $vCur And IsNumber($vCur)) Or (Not IsNumber($vCur) And StringCompare($vTmp, $vCur) >= 0) Then ExitLoop $avArray[$j + 1] = $vCur Next Else For $j = $i - 1 To $iStart Step -1 If (StringCompare($vTmp, $avArray[$j]) >= 0) Then ExitLoop $avArray[$j + 1] = $avArray[$j] Next EndIf $avArray[$j + 1] = $vTmp Next Return EndIf Local $L = $iStart, $R = $iEnd, $vPivot = $avArray[Int(($iStart + $iEnd) / 2)], $fNum = IsNumber($vPivot) Do If $fNum Then While ($avArray[$L] < $vPivot And IsNumber($avArray[$L])) Or (Not IsNumber($avArray[$L]) And StringCompare($avArray[$L], $vPivot) < 0) $L += 1 WEnd While ($avArray[$R] > $vPivot And IsNumber($avArray[$R])) Or (Not IsNumber($avArray[$R]) And StringCompare($avArray[$R], $vPivot) > 0) $R -= 1 WEnd Else While (StringCompare($avArray[$L], $vPivot) < 0) $L += 1 WEnd While (StringCompare($avArray[$R], $vPivot) > 0) $R -= 1 WEnd EndIf If $L <= $R Then $vTmp = $avArray[$L] $avArray[$L] = $avArray[$R] $avArray[$R] = $vTmp $L += 1 $R -= 1 EndIf Until $L > $R _RFLTA_QuickSort($avArray, $iStart, $R) _RFLTA_QuickSort($avArray, $L, $iEnd) EndFunc ;==>_RFLTA_QuickSort ; #INTERNAL_USE_ONLY#============================================================================================================ ; Name...........: _RFLTA_ArrayConcatenate ; Description ...: Joins 2 arrays ; Syntax ........: _RFLTA_ArrayConcatenate(ByRef $avArrayTarget, Const ByRef $avArraySource) ; Parameters ....: $avArrayTarget - Base array ; $avArraySource - Array to add from element 1 onwards ; Return values .: None - array modified ByRef ; Author ........: Ultima ; Modified.......: Melba23 ; Remarks .......: This function is used internally by _RecFileListToArray ; =============================================================================================================================== Func _RFLTA_ArrayConcatenate(ByRef $avArrayTarget, Const ByRef $avArraySource) Local $iUBoundTarget = UBound($avArrayTarget) - 1, $iUBoundSource = UBound($avArraySource) ReDim $avArrayTarget[$iUBoundTarget + $iUBoundSource] For $i = 1 To $iUBoundSource - 1 $avArrayTarget[$iUBoundTarget + $i] = $avArraySource[$i] Next EndFunc ;==>_RFLTA_ArrayConcatenate ; #INTERNAL_USE_ONLY#============================================================================================================ ; Name...........: _RFLTA_ArrayInsert ; Description ...: Insert element into array ; Syntax ........: _RFLTA_ArrayInsert(ByRef $avArray, $iElement, $vValue = "") ; Parameters ....: $avArray - Array to modify ; $iElement - Index position for insertion ; $vValue - Value to insert ; Return values .: None - array modified ByRef ; Author ........: Jos van der Zande, Ultima ; Modified.......: Melba23 ; Remarks .......: This function is used internally by _RecFileListToArray ; =============================================================================================================================== Func _RFLTA_ArrayInsert(ByRef $avArray, $iElement, $vValue = "") Local $iUBound = UBound($avArray) + 1 ReDim $avArray[$iUBound] For $i = $iUBound - 1 To $iElement + 1 Step -1 $avArray[$i] = $avArray[$i - 1] Next $avArray[$iElement] = $vValue EndFunc ;==>_RFLTA_ArrayInsertM23 Any of my own code posted anywhere on the forum is available for use by others without any restriction of any kind Open spoiler to see my UDFs: Spoiler ArrayMultiColSort ---- Sort arrays on multiple columnsChooseFileFolder ---- Single and multiple selections from specified path treeview listingDate_Time_Convert -- Easily convert date/time formats, including the language usedExtMsgBox --------- A highly customisable replacement for MsgBoxGUIExtender -------- Extend and retract multiple sections within a GUIGUIFrame ---------- Subdivide GUIs into many adjustable framesGUIListViewEx ------- Insert, delete, move, drag, sort, edit and colour ListView itemsGUITreeViewEx ------ Check/clear parent and child checkboxes in a TreeViewMarquee ----------- Scrolling tickertape GUIsNoFocusLines ------- Remove the dotted focus lines from buttons, sliders, radios and checkboxesNotify ------------- Small notifications on the edge of the displayScrollbars ----------Automatically sized scrollbars with a single commandStringSize ---------- Automatically size controls to fit textToast -------------- Small GUIs which pop out of the notification area Link to comment Share on other sites More sharing options...
Info Posted February 15, 2010 Author Share Posted February 15, 2010 Thanks Melba Link to comment Share on other sites More sharing options...
wolf9228 Posted February 16, 2010 Share Posted February 16, 2010 #include <File.au3> $aFirst = _FileListToArray("C:\Program Files\") $s = "" _Run($aFirst) Func _Run($a) For $i = 1 To UBound($a) - 1 $s = $s & $a[$i] & @CRLF $files = _FileListToArray($a[$i]) If Not @error Then _Run($files) Next EndFunc ;==>_Run MsgBox(0,"",$s) It's supposed to show me something like but it doesn't expandcollapse popup#Include <Array.au3> HotKeySet("{ESC}", "Terminate") GUICreate("My GUI",700,100) $controlID = GUICtrlCreateLabel("", 10, 30, 680,40) GUISetState() $FindArray = TreeFileListToArray("C:\",0,0,$controlID) _ArrayDisplay($FindArray,"FindArray") Func FileFind($path,$iFlag = 0,$FindArray = 0,$controlID = 0) Local $ResultArray[2] , $DirArray[1] $DirArray[0] = 0 if StringRight($path,1) == "\" Then _ $path = StringTrimRight($path,1) $search = FileFindFirstFile($path & "\*.*") If $search = -1 Then Return False While 1 $file = FileFindNextFile($search) If @error Then ExitLoop if ($controlID) Then GUICtrlSetData($controlID, $path & "\" & $file) $Attrib = FileGetAttrib($path & "\" & $file) $D = StringInStr($Attrib, "D") $S = StringInStr($Attrib, "S") $C = StringInStr($Attrib, "C") if ($D) And Not($S) And Not($C) Then ReDim $DirArray[$DirArray[0] + 2] $DirArray[$DirArray[0] + 1] = $path & "\" & $file $DirArray[0] += 1 EndIf Select Case $iFlag = 0 ReDim $FindArray[$FindArray[0] + 2] $FindArray[$FindArray[0] + 1] = $path & "\" & $file $FindArray[0] += 1 Case $iFlag = 1 if Not ($D) Then ReDim $FindArray[$FindArray[0] + 2] $FindArray[$FindArray[0] + 1] = $path & "\" & $file $FindArray[0] += 1 Else ContinueLoop EndIf Case $iFlag = 2 if ($D) Then ReDim $FindArray[$FindArray[0] + 2] $FindArray[$FindArray[0] + 1] = $path & "\" & $file $FindArray[0] += 1 Else ContinueLoop EndIf Case Else Return False EndSelect WEnd $ResultArray[0] = $FindArray $ResultArray[1] = $DirArray FileClose($search) Return $ResultArray EndFunc Func TreeFileListToArray($path,$iFlag = 0,$FindArray = 0,$controlID = 0) Local $Array[1] $Array[0] = 0 if Not IsArray($FindArray) Then $FindArray = $Array $ResultArray = FileFind($path,$iFlag,$FindArray,$controlID) if IsArray($ResultArray) Then $FindArray = $ResultArray[0] $DirArray = $ResultArray[1] For $i = 1 To $DirArray[0] $FindArray = TreeFileListToArray($DirArray[$i],$iFlag,$FindArray,$controlID) Next EndIf Return $FindArray EndFunc Func Terminate() Exit 0 EndFunc صرح السماء كان هنا Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now