【已解决】请教如何将全盘搜索到的文件存入数组?
本帖最后由 smooth 于 2014-1-29 14:30 编辑请教如何将全盘搜索到的文件存入数组?代码如下,这样只能用消息框的方式显示出来,想存入数组方便调用,谢谢!
Local $str
$Drive = DriveGetDrive("FIXED")
For $i = 1 To $Drive
_Filelist($Drive[$i])
Next
MsgBox(0, 0, $str)
Func _Filelist($SearchDir)
$Search = FileFindFirstFile($SearchDir & "\*.*")
If $Search = -1 Then Return -1
While 1
$File = FileFindNextFile($Search)
If @error Then
FileClose($Search)
Return
ElseIf $file = "." Or $file = ".." Then
ContinueLoop
Else
_Filelist($SearchDir & "\" & $File)
EndIf
$str &= $SearchDir & "\" & $File & @CRLF
WEnd
EndFunc ;==>_Filelist
另:下面的代码能将找到文件存入数组,但是查找最后一个分区的文件,不能实现全盘搜索。
#include <Array.au3>
$Drive = DriveGetDrive("FIXED")
For $i = 1 To $Drive
$sFiles = _FileListEx($Drive[$i] & "\")
Next
$aFiles = StringSplit($sFiles, "|")
_ArrayDisplay($aFiles,"")
Func _FileListEx($sDir)
If StringInStr(FileGetAttrib($sDir), "D") = 0 Then Return SetError(1, 0, "")
Local $oFSO = ObjCreate("Scripting.FileSystemObject")
Local $objDir
Local $aDir = StringSplit($sDir, "|", 2)
Local $iCnt = 0
Local $sFiles = ""
Do
$objDir = $oFSO.GetFolder($aDir[$iCnt])
For $aItem In $objDir.SubFolders
$sDir &= "|" & $aItem.Path
Next
For $aItem In $objDir.Files
$sFiles &= $aItem.Path & "|"
Next
$iCnt += 1
If UBound($aDir) <= $iCnt Then $aDir = StringSplit($sDir, "|", 2)
Until UBound($aDir) <= $iCnt
If $sFiles Then $sFiles = StringTrimRight($sFiles, 1)
Return $sFiles
EndFunc ;==>_FileListEx
请大家帮忙看下,谢谢! 回复 1# smooth
因为你没认真看代码吧,原代码是一个个分区“搜”过去,但只显示了最后一个分区的文件。
要实现全盘搜索,稍稍修改一点代码就可以了Local $sFiles = '', $Drive
$Drive = DriveGetDrive("FIXED")
For $i = 1 To $Drive
$sFiles &= _FileListEx($Drive[$i] & "\")
Next 本帖最后由 smooth 于 2014-1-1 20:25 编辑
回复 2# user3000
我是根据别人的代码改的,忽略了将搜到文件进行累加,非常感谢!
另外请教一下,为什么当$sDir = "c:"时,只搜索C盘的根目录,必须加上"\"才能搜索整个C盘,而当$sDir = "E:"时,不需要加上"\"就可以搜索整个E盘呢? 本帖最后由 smooth 于 2014-1-2 16:49 编辑
全盘(所有硬盘分区)搜索文件并存入数组,我电脑30多万个文件,耗时80多秒。可以根据需要修改,如根据设定的目录层数搜索,根据设定的关键字搜索。
#include <Array.au3>
Local $sFiles, $aFiles
$Drive = DriveGetDrive("FIXED")
For $i = 1 To $Drive
_Filelist($Drive[$i])
Next
$sFiles = StringTrimRight($sFiles, 1)
$aFiles = StringSplit($sFiles, "|")
_ArrayDisplay($aFiles, "")
Func _Filelist($SearchDir)
$Search = FileFindFirstFile($SearchDir & "\*.*")
If $Search = -1 Then Return -1
While 1
$File = FileFindNextFile($Search)
If @error Then
FileClose($Search)
Return
ElseIf $file = "." Or $file = ".." Then
ContinueLoop
Else
_Filelist($SearchDir & "\" & $File)
EndIf
if Not StringInStr(FileGetAttrib($searchdir & "\" & $file), "D") Then
$sFiles &= $SearchDir & "\" & $File & "|"
EndIf
WEnd
EndFunc ;==>_Filelist
页:
[1]