回复 15# afan
AU3方法的话肯定是这两个的,我自己写了个UDF,但CPU占用过高,并且效率不如CMD理想,原型如下,思路是分隔已处理目录的等待处理目录,并分别用两个变量存储对应关系,推测CPU占用过高是因为句柄的频繁释放和申请, 以及过多的文本处理
func ListDIR($dirPath)
If Not FileExists($DirPath & '\') Then Return
Local $tgrPath = $DirPath
Local $hSearch, $FindFile, $DirList, $FileList, $ListCache, $FileCount, $DirCount, $Tmp
While $tgrPath
$ListCache &= $tgrPath & @CRLF
$hSearch = FileFindFirstFile($tgrPath & '\*.*')
If $hSearch <> -1 Then
While 1
$FindFile = FileFindNextFile($hSearch)
If @error Then ExitLoop
$FindFile = $tgrPath & '\' & $FindFile
If FileExists($FindFile & '\') Then
$DirList &= $FindFile & @CRLF
$DirCount += 1
Else
$FileList &= $FindFile & @CRLF
$FileCount += 1
EndIf
WEnd
FileClose($hSearch)
EndIf
$tgrPath = ''
$Tmp = StringRegExp($DirList, '.*', 1)
If $Tmp Then
$tgrPath = $Tmp
$DirList = StringReplace($DirList, $Tmp & @LF, '')
$tgrPath = StringReplace($tgrPath, @CR, '')
EndIf
WEnd
endfunc
;$fileList=搜索到的文件
;$dirList=搜索到的目录
;$FileCount=文件计数器
;$dirList=目录计数器
如果能把“CMD”做成层搜索,效率将是AU3的N倍 回复 18# lindafu
这个并不难,只是,我更偏爱用纯Au3 效率问题,关注一下,一直认为au3程序处理的是不讲速率的,只有能把事情做好就行,看了我太肤浅了,呵呵! 记得api里好像有个直接获取获取目录树的函数,不知道效率如何,或者是记错了 电脑再快些不差1、2秒 我不用cmd的au写法:http://www.autoitx.com/thread-31034-1-1.html
用File System Obj方法,在我电脑上找出c:\windows下所有文件(9250个文件),并存为数组,只花了1.04020835328356秒.
很容易进行改造(不使用另外的函数如FileGetTime,FileGetSize,FileGetAttrib),使之只找指定文件名、指定日期、指定大小、指定属性的文件 回复 23# smartzbs
。。。
实测你的效率还不如我的高 回复smartzbs
。。。
实测你的效率还不如我的高
Qokelate 发表于 2012-3-20 01:59 http://www.autoitx.com/images/common/back.gif
确实不算高~ 用 FileFindFirstFile()、FileFindNextFile() 至少高几倍… 貌似用Filefind递归并不慢啊。
#include <array.au3>
Global $txt
$time=TimerInit()
FindAllFile("c:\windows")
$array=StringRegExp($txt,"[^|]+",3)
MsgBox(0,0,"用时:"&TimerDiff($time)&"毫秒")
_ArrayDisplay($array)
Func FindAllFile($sDir)
Local $hSearch = FileFindFirstFile($sDir & "\*.*")
; 检查搜索是否成功
If $hSearch = -1 Then Return
While 1
Local $sFile = FileFindNextFile($hSearch)
If @error Then ExitLoop
If @extended Then
$txt&=$sDir & "\" & $sFile&"(Direct)|"
FindAllFile($sDir & "\" & $sFile)
ContinueLoop
EndIf
$txt&=$sDir & "\" & $sFile&"|"
WEnd
; 关闭搜索句柄
FileClose($hSearch)
return $txt
EndFunc
3笑的代码 第1次时超过2秒多
以后再运行, 都是0.3秒多点点 回复 26# 3mile
原来@extend可以这样用啊,看来我真的要认真看看帮助,我把我的代码改了下,又比原来快了不少,哈哈,学习了!! 实测的确比CMD还快,厉害! 都是可以FileFindFirstFile可以,只是调试的时候有点麻烦 速度确实很快的。
页:
1
[2]