Puffffff......últimamente veo que han desaparecido muchos post míos, y otros que participaron, en el cual explicaba muchas cosas. Por ejemplo, un post muy largo donde participamos varios (creo que entre ellos rupert.25 con su código), donde hice un estudio de los código que pusimos para búsqueda de archivos. Dentro de este estudio puse pruebas de velocidad.
Creo recordar que en este post se dijo y se enseño mucho sobre la recursividad. Una pena que haya desaparecido junto a otros muy interesantes
.
He buscado en mi tera externo y los he encontrado. Los cuelgo por si interesan. No es por echarme flores, pero recordar que eran de los más rápidos
.
Codigo 1:
Código: Seleccionar todo
#include <GUIConstants.au3>
#include <EditConstants.au3>
#include <WindowsConstants.au3>
#Include <GuiEdit.au3>
#Include <Timers.au3>
#Region ### START Koda GUI section ### Form=
$Form1 = GUICreate("Buscador de Archivos por Chefito", 460, 390, 193, 125, -1, 0)
GUISetBkColor(0xA0A0A4)
$Label1 = GUICtrlCreateLabel("Total de Archivos encontrados:", 8, 16, 240, 25)
GUICtrlSetFont(-1, 14, 400, 0, "Times New Roman")
GUICtrlSetColor(-1, 0x0000FF)
$Label2 = GUICtrlCreateLabel("Carpetas donde se busca el archivo", 8, 300, 435, 80)
GUICtrlSetFont(-1, 12, 600, 0, "Times New Roman")
GUICtrlSetColor(-1, 0x00f0FF)
$Input1=GUICtrlCreateInput("", 8, 48,150,22)
;$Edit1 = GUICtrlCreateEdit("", 8, 78, 441, 161, BitOR($ES_AUTOVSCROLL,$ES_AUTOHSCROLL,$ES_NOHIDESEL,$ES_WANTRETURN,$WS_HSCROLL,$WS_VSCROLL,$ES_READONLY))
$Edit1 = GUICtrlCreateList("", 8, 78, 441, 161);, BitOR($ES_AUTOVSCROLL,$ES_AUTOHSCROLL,$ES_NOHIDESEL,$ES_WANTRETURN,$WS_HSCROLL,$WS_VSCROLL,$ES_READONLY))
$Button1 = GUICtrlCreateButton("Buscar", 30, 256, 83, 33, 0)
$Button2 = GUICtrlCreateButton("Detener", 140, 256, 83, 33, 0)
$Button3 = GUICtrlCreateButton("Carpeta a buscar", 165, 48)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###
_Timer_SetTimer($form1, 50, "_Eventos")
Global $seguir=1,$carpeta="C:"
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
Case $Button1 ;si pulsar comienza la busqueda del archivo.
If GUICtrlRead($Input1)="" Then
MsgBox(0,"Está vacio","Debes introducir el archivo a buscar")
Else
$seguir=1
;_GUICtrlEdit_SetText($Edit1, "")
$t=TimerInit()
buscar($carpeta,GUICtrlRead($Input1))
GUICtrlSetData($Label2,"Finalizada la busqueda")
EndIf
Case $Button3 ;elige el directorio donde buscar el archivo.
$carpeta = FileSelectFolder("Elegir el directorio", "")
If StringLen($carpeta)=3 Then $carpeta=StringLeft($carpeta,2)
GUICtrlSetData($Label2,$carpeta)
EndSwitch
WEnd
Func Buscar($directorio_donde_buscar,$fichero_a_buscar)
;FileChangeDir ($directorio_donde_buscar)
$directorio_donde_buscar=$directorio_donde_buscar & "\"
$search = FileFindFirstFile($directorio_donde_buscar & "*.*")
$search2 = FileFindFirstFile($directorio_donde_buscar & $fichero_a_buscar)
$file2 = FileFindNextFile($search2)
While $seguir=1
$file = FileFindNextFile($search)
If @error Then
ExitLoop
Else
If StringInStr(FileGetAttrib($directorio_donde_buscar & $file),"D")=0 Then
;GUICtrlSetData($Label2,$directorio_donde_buscar & $file)
If $file=$file2 Then
;_GUICtrlEdit_InsertText ($Edit1, $directorio_donde_buscar & $file & @CRLF)
;MsgBox(0,"",TimerDiff($t)/1000)
GUICtrlSetData($Edit1,$directorio_donde_buscar & $file)
$file2 = FileFindNextFile($search2)
EndIf
Else
buscar($directorio_donde_buscar & $file,$fichero_a_buscar)
EndIf
EndIf
WEnd
FileClose($search2)
FileClose($search)
EndFunc
Func _eventos($hWnd, $Msg, $iIDTimer, $dwTime)
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
Case $Button2
$seguir=0
EndSwitch
EndFunc
Codigo 2:
Código: Seleccionar todo
#include <GUIConstants.au3>
#include <EditConstants.au3>
#include <WindowsConstants.au3>
#Include <GuiEdit.au3>
#Include <Timers.au3>
#Region ### START Koda GUI section ### Form=
$Form1 = GUICreate("Buscador de Archivos por Chefito", 460, 390, 193, 125, -1, 0)
GUISetBkColor(0xA0A0A4)
$Label1 = GUICtrlCreateLabel("Total de Archivos encontrados:", 8, 16, 240, 25)
GUICtrlSetFont(-1, 14, 400, 0, "Times New Roman")
GUICtrlSetColor(-1, 0x0000FF)
$Label2 = GUICtrlCreateLabel("Carpetas donde se busca el archivo", 8, 300, 435, 80)
GUICtrlSetFont(-1, 12, 600, 0, "Times New Roman")
GUICtrlSetColor(-1, 0x00f0FF)
$Input1=GUICtrlCreateInput("", 8, 48,150,22)
;$Edit1 = GUICtrlCreateEdit("", 8, 78, 441, 161, BitOR($ES_AUTOVSCROLL,$ES_AUTOHSCROLL,$ES_NOHIDESEL,$ES_WANTRETURN,$WS_HSCROLL,$WS_VSCROLL,$ES_READONLY))
$Edit1 = GUICtrlCreateList("", 8, 78, 441, 161);, BitOR($ES_AUTOVSCROLL,$ES_AUTOHSCROLL,$ES_NOHIDESEL,$ES_WANTRETURN,$WS_HSCROLL,$WS_VSCROLL,$ES_READONLY))
$Button1 = GUICtrlCreateButton("Buscar", 30, 256, 83, 33, 0)
$Button2 = GUICtrlCreateButton("Detener", 140, 256, 83, 33, 0)
$Button3 = GUICtrlCreateButton("Carpeta a buscar", 165, 48)
_Timer_SetTimer($form1, 50, "_Eventos")
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###
Global $acabar=0,$carpeta="C:"
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
Case $Button1 ;si pulsar comienza la busqueda del archivo.
If GUICtrlRead($Input1)="" Then
MsgBox(0,"Está vacio","Debes introducir el archivo a buscar")
Else
$acabar=0
_GUICtrlEdit_SetText($Edit1, "")
;$t=TimerInit()
buscar($carpeta,GUICtrlRead($Input1))
;MsgBox(0,"",TimerDiff($t)/1000)
GUICtrlSetData($Label2,"Finalizada la busqueda")
EndIf
Case $Button3 ;elige el directorio donde buscar el archivo.
$carpeta = FileSelectFolder("Elegir el directorio", "")
If StringLen($carpeta)=3 Then $carpeta=StringLeft($carpeta,2)
GUICtrlSetData($Label2,$carpeta)
EndSwitch
WEnd
Func Buscar($directorio_donde_buscar,$fichero_a_buscar)
$directorio_donde_buscar=$directorio_donde_buscar & "\"
$search = FileFindFirstFile($directorio_donde_buscar & $fichero_a_buscar)
While $acabar=0 ;si $acabar=1 no entra en el while
$file = FileFindNextFile($search)
If @error Then
ExitLoop
Else
If StringInStr(FileGetAttrib($directorio_donde_buscar & $file),"D")=0 Then
;_GUICtrlEdit_InsertText ($Edit1, $directorio_donde_buscar & $file & @CRLF) ;inserta el fichero encontrado.
GUICtrlSetData($Edit1,$directorio_donde_buscar & $file)
EndIf
EndIf
WEnd
$search = FileFindFirstFile($directorio_donde_buscar & "*")
While $acabar=0 ;si $acabar=1 no entra en el while
$file = FileFindNextFile($search)
If @error Then
ExitLoop
Else
;entra en este if si el resultado de $file es un archivo.
If StringInStr(FileGetAttrib($directorio_donde_buscar & $file),"D")=0 Then
GUICtrlSetData($Label2,$directorio_donde_buscar & $file) ;con esta linea, se ven los directorios y los archivos.
Else
;GUICtrlSetData($Label2,$directorio_donde_buscar & $file) ;con esta linea, solo se verían los directorios.
buscar($directorio_donde_buscar & $file,$fichero_a_buscar) ;si es un directorio, la función se llama a sí misma y busca en ese directorio.
EndIf
EndIf
WEnd
FileClose($search)
EndFunc
Func _eventos($hWnd, $Msg, $iIDTimer, $dwTime)
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
Case $Button2
$acabar=1
EndSwitch
EndFunc
Las búsquedas aceptan comodines.
La diferencia entre los dos era la forma de búsqueda. Si te digo la verdad no recuerdo mucho el código ya que fue hace tiempo
.
He visto que he puesto algunas líneas comentadas para realizar bien el estudio de velocidad. Si quitas muchas de estas, te salen en el label de abajo los directorios donde están buscando en ese momento.
También decir que mis funciones tiran solamente de funciones nativas de AutoIt. En cambio la de rupert.25 y Xpyro tiran de funciones creadas como _GUICtrlEdit_AppendText, _FileListToArray varias veces, y al hacer esto el código aumenta. Esto no quiere decir que sean más lentas, pero creo recordar que en este caso sí lo eran, y en un algoritmo de búsqueda la velocidad es muy importante.
REITERO QUE DE ESTO ÚLTIMO NO ESTOY MUY SEGURO, YA QUE NO ESTÁ EL POST ORIGINAL .
Saludos.