找回密码
 加入
搜索
查看: 1924|回复: 2

怎么实现搜索!

[复制链接]
发表于 2008-7-1 23:45:07 | 显示全部楼层 |阅读模式
怎么实现在全盘搜索一下个文件!
$search = FileFindFirstFile("*.*")


好像仅限于当前目录!

[ 本帖最后由 qzdisk 于 2008-7-7 19:25 编辑 ]
发表于 2008-7-1 23:57:47 | 显示全部楼层
参考一下我的递归调用:
;--------其中有子函数显示数组全部信息的,不需要显示时可以不要(第36行调用)----------
#include <Array.au3>
;-------------从“File.au3”里摘录进来的:作用是返回文件及文件夹数组--------------
Func _FileListToArray($sPath, $sFilter = "*", $iFlag = 0)
Local $hSearch, $sFile, $asFileList[1]
If Not FileExists($sPath) Then Return SetError(1, 1, "")
If (StringInStr($sFilter, "\")) Or (StringInStr($sFilter, "/")) Or (StringInStr($sFilter, ":")) Or (StringInStr($sFilter, ">")) Or (StringInStr($sFilter, "<")) Or (StringInStr($sFilter, "|")) Or (StringStripWS($sFilter, 8) = "") Then Return SetError(2, 2, "")
If Not ($iFlag = 0 Or $iFlag = 1 Or $iFlag = 2) Then Return SetError(3, 3, "")
$hSearch = FileFindFirstFile($sPath & "\" & $sFilter)
If $hSearch = -1 Then Return SetError(4, 4, "")
While 1
$sFile = FileFindNextFile($hSearch)
If @error Then
SetError(0)
ExitLoop
EndIf
If $iFlag = 1 And StringInStr(FileGetAttrib($sPath & "\" & $sFile), "D") <> 0 Then ContinueLoop
If $iFlag = 2 And StringInStr(FileGetAttrib($sPath & "\" & $sFile), "D") = 0 Then ContinueLoop
ReDim $asFileList[UBound($asFileList) + 1]
$asFileList[0] = $asFileList[0] + 1
$asFileList[UBound($asFileList) - 1] = $sFile
WEnd
FileClose($hSearch)
Return $asFileList
EndFunc ;==>返回一个数组

;----------以下是假设的目标目录和要找的匹配文件类型-------------
$OldPath="e:"
$OldFileLX="*.gho"
;------------以下是必须的全局变量命名---------------------------------
Global $FileNumber=0 ;记录数组维数,全局变量
Global $FileArray[1] ;返回的文件名主数组(全路径),全局变量
;----------------以下是用户命令----------------
FindFiles($OldPath,$OldFileLX);调用语句
$FileArray[0]=$FileNumber;维数付给数组【0】
_ArrayDisplay($FileArray,"hhhh");调用“Array.au3”的子函数函数,显示整个数组信息

;----------------以下是由顽固不化写的递归调用函数:找所有匹配文件---------------------
;-----注意:必须和以上两个全局变量一起使用。 顽固不化 于 2008.4.22--------------------
Func FindFiles($path,$filelx) ;查找当前目录和所有子目录下的匹配文件函数
Local $filelist
Local $folders
Local $i,$j,$newpath
$filelist=_FileListToArray ($path,$filelx,1) ;调用“File.au3”的子函数,返回匹配文件数组
if not @error then
if $filelist[0]>0 Then
for $i=1 to $filelist[0]
$FileNumber=$FileNumber+1
ReDim $FileArray[UBound($FileArray) + 1] 
$FileArray[$FileNumber]=$path&"\"&$filelist[$i] ;给主数组赋值
Next
EndIf
EndIf 
$folders=_FileListToArray ($path,"*",2) ;调用“File.au3”的子函数,返回子目录数组
if not @error Then
if $folders[0]>0 Then
For $j=1 to $folders[0]
$newpath=$path&"\"&$folders[$j]
FindFiles($newpath,$filelx) ;进入子目录递归调用本身找匹配文件
Next
EndIf
EndIf
EndFunc
;-----------结束---------------------------

评分

参与人数 1金钱 +10 收起 理由
夜苦寒 + 10 乐于助人

查看全部评分

 楼主| 发表于 2008-7-2 05:32:24 | 显示全部楼层
哇!!!!!!!!!!!
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-4-27 10:19 , Processed in 0.069912 second(s), 20 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表