itljl 发表于 2008-8-10 20:05:58

如何自定义函数返回一个数组

dim $i = 0
$x = _filelist("c:\windows")
msgbox(0,"",$X)
Func _filelist($searchdir)
        $search = FileFindFirstFile($searchdir & "\*.*")
        If $search = -1 Then Return -1
        While 1
                $file = FileFindNextFile($search)
                If @error Then
                        FileClose($search)
                        Return -1
                ElseIf $file = "."Or $file = ".."Then
                        ContinueLoop
                ElseIf StringInStr(FileGetAttrib($searchdir & "\" & $file), "D") Then
                        _filelist($searchdir & "\" & $file)
                EndIf
                If StringRight($file, 4) = ".exe"Then
                        $i += 1
                        ;FileWriteLine(@ScriptDir&"\file.txt", $searchdir & "\" & $file & @CRLF)
return $searchdir & "\" & $file
                EndIf
        WEnd
EndFunc   ;==>_filelist

return $searchdir & "\" & $file这里只能返回搜索到的第一个文件,之后的文件就无法返回,有谁能指导一下?

[ 本帖最后由 itljl 于 2008-8-11 18:36 编辑 ]

pcbar 发表于 2008-8-10 20:25:55

可以这样
但有限制,数组最多1600万个元素,递归最多384层
#include <array.au3>
Global $tmp
dim $i = 0
$x = _filelist("d:\aaa",$tmp)
_ArrayDisplay($tmp)
Func _filelist($searchdir,ByRef $tmp)
       
      $search = FileFindFirstFile($searchdir & "\*.*")
      If $search = -1 Then Return -1
      While 1
                $file = FileFindNextFile($search)
                If @error Then
                        FileClose($search)
                        Return -1
                ElseIf $file = "."Or $file = ".."Then
                        ContinueLoop
                ElseIf StringInStr(FileGetAttrib($searchdir & "\" & $file), "D") Then
                        _filelist($searchdir & "\" & $file,$tmp)
                EndIf
                If StringRight($file, 4) = ".exe"Then
                        $i += 1
                        ;FileWriteLine(@ScriptDir&"\file.txt", $searchdir & "\" & $file & @CRLF)
_ArrayAdd($tmp,$searchdir & "\" & $file)
$tmp+=1
                EndIf
      WEnd
EndFunc   ;==>_filelist

itljl 发表于 2008-8-10 23:29:53

谢谢,

可是,天,为什么会有这样的限制。搜索文件的目录这个递归很容易就超出384层

pcbar 发表于 2008-8-11 18:23:55

请改标题为已解决!,谢谢

[ 本帖最后由 pcbar 于 2008-8-11 21:03 编辑 ]

ncxj 发表于 2015-10-15 07:49:50

这个很有用,谢谢超版
页: [1]
查看完整版本: 如何自定义函数返回一个数组