Rekursive Dateisuche

  • Moin,

    Wie schon im Thread Titel steht, habe eine Frage zur Rekursiven Dateisuche.
    Source :Rekursive Dateisuche per Objekt

    Es sucht ja eine Datei und gibt den Pfad der gesuchten Datei wieder.

    Allerdings, wenn mehrere Dateien mit dem gleichen Namen ( z.B in den Unter Ordnern)
    existieren gibt er nicht alle wieder.
    Gibt es vielleicht eine Lösung das er alle wieder gibt?

    Gruß
    S1lver

  • Suchergebnisse 1-1 von insgesamt 1 für »RekursiveFilelist«.
    Und das ist der Thread hier :D

  • Oscar wie lasse ich mir den die gefunden Pfade + Dateien in einer txt Datei wieder geben?
    Ich denke mal mit

    [autoit]

    _ArrayDisplay($aReturn, 'Alle Dateien mit der Erweiterung ".au3"')

    [/autoit]

    aber wo werden sie gespeichert?

    UEZ dein Programm sucht aber nur nach einer Datei?

  • Danke euch das ist mir erstmal genug Code, dann werde ich mich mal an die Arbeit machen :)

  • Oscar wie lasse ich mir den die gefunden Pfade + Dateien in einer txt Datei wieder geben?
    Ich denke mal mit

    [autoit]

    _ArrayDisplay($aReturn, 'Alle Dateien mit der Erweiterung ".au3"')

    [/autoit]

    aber wo werden sie gespeichert?

    UEZ dein Programm sucht aber nur nach einer Datei?

    Nein, nach den Dateien, die ins Suchmuster passen. Im Beispiel nach *.log Dateien.

    Gruß,
    UEZ

    Auch am Arsch geht ein Weg vorbei...

    ¯\_(ツ)_/¯

  • Ok aber wo gibt er das Ergebnis aus?

    Das Ergebnis wird in ein Array gespeichert und nur angezeigt.

    Das Schreiben des Ergebnisses in eine Datei ist nicht implementiert, da ich nicht weiß, was die Leute mit dem Ergebniss machen wollen!

    Gruß,
    UEZ

    Auch am Arsch geht ein Weg vorbei...

    ¯\_(ツ)_/¯

  • Wäre nicht schlecht es in einer txt Datei auszugeben.
    Ist bestimmt einfach bekomm es aber nicht hin :D

  • Spoiler anzeigen
    [autoit]


    #include <Array.au3>
    Dim $ergebnis[1]

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

    $path = "c:\"
    $file = ".mp3" ;suche nach *.mp3

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

    $ergebnis = File_Seeker($path, $file, $ergebnis, True)

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

    If Not @error Then
    ;~ _ArraySort($ergebnis)
    _ArrayDisplay($ergebnis)
    Local $log
    For $i = 1 To UBound($ergebnis) - 1
    $log &= $ergebnis[$i] & @CRLF
    Next
    $file = FileOpen(@ScriptDir & "\Ergebnis.log", 1)
    FileWrite($file, $log) ;schreibe das Ergebnis in die "Ergebnis.log" Datei
    FileClose($file)
    EndIf

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

    Exit

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

    ;==================================================================================================
    ; Function Name: File_Seeker($path, $file, $array)
    ; Description: searchs for a file recursively on given drive
    ; Parameter(s): $path path where to search
    ; $file filename to search for
    ; $array to save the search results
    ; $ext search for file extension, e.g. .mp3
    ; $exact to search for exact file name (not case sensitive)
    ; Return Value(s): an array with the full path of the files, $array[0] = amount of found files
    ; Version: v0.75 Build 2010-01-18 Beta
    ; Author(s): UEZ
    ;==================================================================================================
    Func File_Seeker($path, $file, ByRef $aResults, $ext = False, $exact = False)
    If $file <> "" And IsArray($aResults) Then
    If StringRegExp(StringLeft($path, 1), "[a-zA-Z]") And StringMid($path, 2, 1) = ":" Then
    If StringRight($path, 1) <> "\" Then $path &= "\"
    Local $seek, $suffix = ""
    Local $search = FileFindFirstFile($path & "*")
    If $search = -1 Then
    SetError(2)
    Return
    EndIf
    While 1
    $seek = FileFindNextFile($search)
    If @error Then ExitLoop
    If @extended Then File_Seeker($path & $seek & "\", $file, $aResults, $ext, $exact)
    If $exact Then
    If $seek = $file Then _ArrayAdd($aResults, $path & $seek)
    Else
    If $ext Then $suffix = "$"
    If StringRegExp($seek, "(?i:\" & $file & $suffix & "\b)") Then _ArrayAdd($aResults, $path & $seek)
    EndIf
    WEnd
    FileClose($search)
    $aResults[0] = UBound($aResults) - 1
    SetError(0)
    Return $aResults
    Else
    SetError(1)
    Return
    EndIf
    Else
    SetError(1)
    Return
    EndIf
    EndFunc

    [/autoit]


    Gruß,
    UEZ

    Auch am Arsch geht ein Weg vorbei...

    ¯\_(ツ)_/¯

  • Da öffnet sich dann aber noch eine GUI *heul* geht es auch ohne :)?
    Ansonsten perfekt werde es testen.

  • Supi klappt wunderbar.
    Allerdings sucht er nur nach Dateiendungen!?
    Wenn ich zb test.exe eingebe gibt er mir nix zurück, obwohl eine vorhanden ist.
    bei .exe listet er mir sie jedoch auf.

    Gruß

  • Yep, hast recht - ist ein Bug:

    Hier die Version, die richtig funktionieren sollte:

    Spoiler anzeigen
    [autoit]


    #include <Array.au3>
    Dim $ergebnis[1]

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

    $path = @WindowsDir
    $file = ".log"
    ;~ $ergebnis = File_Seeker($path, $file, $ergebnis, False, True) ;searchs for ".log" (exact search)
    $ergebnis = File_Seeker($path, $file, $ergebnis) ;searchs for "*.log"
    ;~ $ergebnis = File_Seeker($path, $file, $ergebnis, True) ;searchs for files with extension .log

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

    If Not @error Then
    ;~ _ArraySort($ergebnis)
    ;~ _ArrayDisplay($ergebnis)
    Local $log
    For $i = 1 To UBound($ergebnis) - 1
    $log &= $ergebnis[$i] & @CRLF
    Next
    $file = FileOpen(@ScriptDir & "\Ergebnis.log", 1)
    FileWrite($file, $log)
    FileClose($file)
    EndIf

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

    Exit

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

    ;==================================================================================================
    ; Function Name: File_Seeker($path, $file, $array)
    ; Description: searchs for a file recursively on given drive
    ; Parameter(s): $path path where to search
    ; $file filename to search for
    ; $array to save the search results
    ; $ext search for file extension, e.g. .mp3
    ; $exact to search for exact file name (not case sensitive)
    ; Return Value(s): an array with the full path of the files, $array[0] = amount of found files
    ; Version: v0.80 Build 2010-01-28 Beta
    ; Author(s): UEZ
    ;==================================================================================================
    Func File_Seeker($path, $file, ByRef $aResults, $ext = False, $exact = False)
    If $file <> "" And IsArray($aResults) And BitAND($ext, $exact) <> 1 Then
    If StringRegExp(StringLeft($path, 1), "[a-zA-Z]") And StringMid($path, 2, 1) = ":" Then
    If StringRight($path, 1) <> "\" Then $path &= "\"
    Local $seek, $suffix = ""
    Local $search = FileFindFirstFile($path & "*")
    If $search = -1 Then
    SetError(2)
    Return
    EndIf
    While 1
    $seek = FileFindNextFile($search)
    If @error Then ExitLoop
    If @extended Then File_Seeker($path & $seek & "\", $file, $aResults, $ext, $exact)
    If $exact And Not $ext Then
    If $seek = $file Then _ArrayAdd($aResults, $path & $seek)
    Else
    If $ext Then
    If StringRegExp($seek, "(?i:\" & $file & "+$\b)") And StringLeft($file, 1) = "." Then _ArrayAdd($aResults, $path & $seek)
    Else
    If StringRegExp($seek, "(?i:" & $file & ")+") Then _ArrayAdd($aResults, $path & $seek)
    EndIf
    EndIf
    WEnd
    FileClose($search)
    $aResults[0] = UBound($aResults) - 1
    SetError(0)
    Return $aResults
    Else
    SetError(1)
    Return
    EndIf
    Else
    SetError(1)
    Return
    EndIf
    EndFunc

    [/autoit]

    Bitte testen und Feedback!

    Danke,

    UEZ

    Auch am Arsch geht ein Weg vorbei...

    ¯\_(ツ)_/¯

    6 Mal editiert, zuletzt von UEZ (28. Januar 2010 um 20:11)