Что нового

Поиск файла включая поддиректории

Vlasssov

Осваивающий
Сообщения
428
Репутация
25
FileFindFirstFile - осуществляет поиск только в текущей директории, или еще захватывает поддиректории. Что-то в помои ничего по этому поводу не дано.
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8 473
Репутация
2 403
Vlasssov [?]
FileFindFirstFile - осуществляет поиск только в текущей директории
Да, для рекурсий нужно использовать либо дополнительные вызовы подфункций, либо циклы.

Остальное в поиске есть.
 
Автор
Vlasssov

Vlasssov

Осваивающий
Сообщения
428
Репутация
25
А в каком поиске??? Я бф поискал... ;D
 

sforce5

Олл фо ЛулзЪ
Сообщения
160
Репутация
41
Код:
_SearchTreeForFile("ПАПКА-ШМАПКА", "ФАЙЛ")

;===============================================================================
; Function Name:   _SearchTreeForFile($sRootPath, $sFileName)
; Description::    Filesearch in given path and all subdirectories
; Parameter(s):    $sRootPath   directory to start search
;                  $sFileName   file to search
; Return Value(s): if found     path of file
;                  not found    0
; Author(s):       BugFix ([email protected])
;===============================================================================
Func _SearchTreeForFile($sRootPath, $sFileName)
    If StringRight($sRootPath, 1) <> '\' Then $sRootPath &= '\'
    Local $sOutputPathBuffer = ''
    Local $aRet = DllCall("imagehlp.dll", 'long', 'SearchTreeForFile', 'str', _
            $sRootPath, 'str', $sFileName, 'str', $sOutputPathBuffer)
    If $aRet[0] = 1 Then
        Return $aRet[3]
    Else
        Return 0
    EndIf
EndFunc  ;==>_SearchTreeForFile
 
Автор
Vlasssov

Vlasssov

Осваивающий
Сообщения
428
Репутация
25
Vlasssov сказал(а):
А в каком поиске??? Я бф поискал... ;D
Пардон... При таком оформлении поиска, я сразу ссылку не обнаружил...
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8 473
Репутация
2 403
sforce5
А файл «imagehlp» должен по умолчанию присутствовать у всех в системе? :whistle:
 

sforce5

Олл фо ЛулзЪ
Сообщения
160
Репутация
41
CreatoR сказал(а):
sforce5
А файл «imagehlp» одлжен по умолчанию присутствовать у всех в системе? :whistle:
imagehlp.dll да

Функция то не моя, незаметил
 
Автор
Vlasssov

Vlasssov

Осваивающий
Сообщения
428
Репутация
25
Нашел по ссылке пример кода... Решил его переделать, чтобы в результате работы выдавал массив с ссылками для дальней шей обработки
Код:
#Include  <File.au3>
#include  <Array.au3>

$sp = _FindFiles('C:', '*.txt')
_ArrayDisplay($sp)

Func _FindFiles($sRoot, $sFile)

    Local $FileList
	dim $sp[1]
	$k=0
    $FileList = _FileListToArray($sRoot, $sFile, 1)
    If Not @error Then
        
		For $i = 1 To $FileList[0]
        $k+=1
		$sp[$k] = $sRoot & '\' & $FileList[$i]    
			;ConsoleWrite($sRoot & '\' & $FileList[$i] & @CR)
        Next
    EndIf
    $FileList = _FileListToArray($sRoot, '*', 2)
    If Not @error Then
        For $i = 1 To $FileList[0]
            _FindFiles($sRoot & '\' & $FileList[$i], $sFile)
        Next
    EndIf
	Return $sp
EndFunc   ;==>_FindFiles

Не дает увеличивать массив на один элемент. К чему бы это?

poisk.au3 (18) : ==> Array variable has incorrect number of subscripts or subscript dimension range exceeded.:
$sp[$k] = $sRoot & '\' & $FileList[$i]
^ ERROR
>Exit code: 1 Time: 0.210
 
Автор
Vlasssov

Vlasssov

Осваивающий
Сообщения
428
Репутация
25
Код:
#Include  <File.au3>
#include  <Array.au3>


Func _FindFilesName($sRoot, $sFile,byref $sp)
dim $ss
dim $i

;Проверка на слэш
if StringRight($sRoot,1) = "\" Then
$sRoot = StringLeft($sRoot,StringLen($sRoot)-1)

EndIf
$ss = ""
_FindFiles($sRoot, $sFile,$ss)
$sp1 = StringSplit($ss, @TAB)

if  $sp1[0]>0 then
	redim  $sp[$sp1[0]-1]
 	for $i=1 to $sp1[0]-2
		$sp[$i] = $sp1[$i+1]
	Next
	$sp[0] = $sp1[0]-2
Else
	$sp[0] = 0
EndIf

EndFunc

Func _FindFiles($sRoot, $sFile, byref $ss)

    Local $FileList
		
    $FileList = _FileListToArray($sRoot, $sFile, 1)
    If Not @error Then
		For $i = 1 To $FileList[0]
		
			;ConsoleWrite($sRoot & '\' & $FileList[$i] & @CR)
			$ss = $ss &$sRoot & '\' & $FileList[$i]& @TAB
        Next
     EndIf
    $FileList = _FileListToArray($sRoot, '*', 2)
    If Not @error Then
        For $i = 1 To $FileList[0]
            _FindFiles($sRoot & '\' & $FileList[$i], $sFile,$ss)
        Next
    Else
	
	EndIf
EndFunc

Сделал вот так - коряво, но работает...
 
Верх