Dateisuche in Ordner und allen Unterordnern - eine weitere Variante

    • Offizieller Beitrag

    Hi,
    bin auf eine weitere Methode zum Durchsuchen von Ordnern/Unterordnern gestoßen. Hat selbst bei einer Suche im Root mit Datei in 4 Ebenen Tiefe nur 30 s gebraucht. :D

    [autoit]

    Local $ret = _SearchTreeForFile('C:\', 'qmark.acs')
    If $ret Then
    MsgBox(0, 'Gefunden', $ret)
    Else
    MsgBox(0, 'Nicht Gefunden', 'Datei nicht im Suchpfad')
    EndIf

    [/autoit][autoit][/autoit][autoit]

    ;===============================================================================
    ; Function Name: _SearchTreeForFile($sRootPath, $sFileName)
    ; Description:: Dateisuche in einem Pfad und allen Unterpfaden
    ; Parameter(s): $sRootPath Startpfad der Suche
    ; $sFileName Name der gesuchten Datei
    ; Return Value(s): gefunden Pfad der gesuchten Datei
    ; n. gefunden 0
    ; Author(s): BugFix ([email='bugfix@autoit.de'][/email])
    ;===============================================================================
    Func _SearchTreeForFile($sRootPath, $sFileName)
    If StringRight($sRootPath, 1) <> '\' Then $sRootPath &= '\'
    Local $sOutputPathBuffer = ''
    Local $aRet = DllCall("imagehlp", 'long', 'SearchTreeForFile', 'str', _
    $sRootPath, 'str', $sFileName, 'str', $sOutputPathBuffer)
    If $aRet[0] = 1 Then
    Return $aRet[3]
    Else
    Return 0
    EndIf
    EndFunc ;==>_SearchTreeForFile

    [/autoit]
  • Hallo BugFix,

    ich habe eine GUI für die Suche gebastelt,

    Spoiler anzeigen
    [autoit]


    #include <ButtonConstants.au3>
    #include <ComboConstants.au3>
    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>

    [/autoit] [autoit][/autoit] [autoit]

    #Region ### START Koda GUI section ### Form=.\Such_index.kxf
    $Suche_index = GUICreate("Suche", 316, 231, -1, -1)
    GUISetIcon("C:\WINDOWS\system32\shell32.dll", 22)
    $GroupBox1 = GUICtrlCreateGroup("", 8, 0, 297, 193)
    $suche_in_Button = GUICtrlCreateButton("suche in", 208, 40, 75, 25, 0)
    $suche_Input = GUICtrlCreateInput("", 24, 40, 169, 21, BitOR($ES_AUTOVSCROLL,$ES_AUTOHSCROLL,$WS_HSCROLL))
    $suche_endungen_Combo = GUICtrlCreateCombo("", 24, 104, 257, 25, BitOR($CBS_DROPDOWN,$CBS_AUTOHSCROLL,$CBS_SORT,$WS_GROUP,$WS_HSCROLL,$WS_VSCROLL))
    GUICtrlCreateGroup("", -99, -99, 1, 1)
    $suche_Button_start = GUICtrlCreateButton("&OK", 64, 200, 75, 25, 0)
    $suche_Button_Close = GUICtrlCreateButton("&Close", 160, 200, 75, 25, 0)
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

    [/autoit] [autoit][/autoit] [autoit]

    GUICtrlSetData($suche_Input,"Auswahl")
    $Combo_suche_endung = GUICtrlSetData($suche_endungen_Combo,"*.log|*.ini|*.txt|*.exe|*.bat|*.doc|*.xls","Auswahl")

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    GUIDelete($Suche_index)
    ExitLoop

    [/autoit] [autoit][/autoit] [autoit]

    Case $suche_in_Button

    [/autoit] [autoit][/autoit] [autoit]

    GUICtrlSetData($suche_Input,"")
    $var_suche = FileSelectFolder("Choose a folder.", "")
    GUICtrlSetData($suche_Input,$var_suche,"Auswahl")

    Case $suche_Button_start
    $suche_Input1 = GUICtrlRead($suche_Input)
    $suche_endungen_Combo1 = GUICtrlRead($suche_endungen_Combo)
    If GUICtrlRead($suche_Input) = "" Or GUICtrlRead($suche_Input) = "Auswahl" Then
    MsgBox(48,"Error, fehlende Eingabe","Bitte geben sie den Suchpfad ein")
    ElseIf GUICtrlRead($suche_endungen_Combo) = "" Or GUICtrlRead($suche_endungen_Combo) = "Auswahl" Then
    MsgBox(48,"Error, fehlende Eingabe","Bitte wählen sie die Endung aus")

    Else
    $suche_endungen_Combo1 = GUICtrlRead($suche_endungen_Combo)
    MsgBox("","",$suche_Input1)
    MsgBox("","",$suche_endungen_Combo1)

    ;~
    Local $ret = _SearchTreeForFile($suche_Input1, $suche_endungen_Combo1)
    ;~ Local $ret = _SearchTreeForFile("c:\Temp", "KB920670.txt")
    If $ret Then
    MsgBox(0, 'Gefunden', $ret)
    Else
    MsgBox(0, 'Nicht Gefunden', 'Datei nicht im Suchpfad')
    EndIf
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    Case $suche_Button_Close
    GUIDelete($Suche_index)
    ExitLoop

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    EndSwitch
    WEnd

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    ;===============================================================================
    ; Function Name: _SearchTreeForFile($sRootPath, $sFileName)
    ; Description:: Dateisuche in einem Pfad und allen Unterpfaden
    ; Parameter(s): $sRootPath Startpfad der Suche
    ; $sFileName Name der gesuchten Datei
    ; Return Value(s): gefunden Pfad der gesuchten Datei
    ; n. gefunden 0
    ; Author(s): BugFix ([email='bugfix@autoit.de'][/email])
    ;===============================================================================
    Func _SearchTreeForFile($sRootPath, $sFileName)
    If StringRight($sRootPath, 1) <> '\' Then $sRootPath &= '\'
    Local $sOutputPathBuffer = ''
    Local $aRet = DllCall("imagehlp", 'long', 'SearchTreeForFile', 'str', _
    $sRootPath, 'str', $sFileName, 'str', $sOutputPathBuffer)
    If $aRet[0] = 1 Then
    Return $aRet[3]
    Else
    Return 0
    EndIf
    EndFunc ;==>_SearchTreeForFile

    [/autoit] [autoit][/autoit] [autoit][/autoit]


    ich habe nur ein Problem wenn mann mehre Dateien sucht dann klappt es nicht und sagt dann er hat nichts gefunden

    Gruß Martin

    Einmal editiert, zuletzt von whe-king (5. Januar 2009 um 00:25)