_FileListToRekursiv Update: 08.07.2011

  • Hi TheDude !


    Versuch es mal so:

    [autoit]

    $FileListe = _FileListToRekursiv("D:\", "xyz123.dat", 3, 0, 0, False)

    [/autoit]

    Ich habe die such beschrieben

    [autoit]

    ;===================================================================================================================================#
    ;Function Name....: _FileListToRekursiv($Path, $Wildc = '*', $iFlag = 0, $iTB = 0, $iIntex = 0, $More = False)
    ;Description......: Auflistung von Dateien u. o. Ordner
    ;$Path............: Pfad
    ;$Wildc...........: ---- > '*' (Standart) Suchbegrif u. o. Wildcards bei Wildcards mit o. suchbegriff $iFlag auf '3' setzen es ist auch
    ; möglich mehrere suchbegriffe zu suchen z.B (*wma,*mp3,*txt) o. (wma,mp3,txt) getrennt mit ',' < -----
    ;$iFlag...........: '0' (Standart) Datein u. Ordner '1' nur Datein '2' nur Ordner --- > '3' um mit suchbegriffen zu suchen wie (*.txt) < ----
    ;$iTB.............: '0' (Standart) für alle Unter-Verzeichnisse
    ;$iIndex..........: '0' (Standard), es fungiert jedes in den Trennzeichen enthaltene Zeichen als Trennmarkierung
    ; '1' es wird der gesamte Trennzeichenstring als Trennmarkierung genutzt
    ; '2' deaktiviert die Rückgabe der Anzahl im ersten Element. Dadurch wird das Array 0-basierend.
    ;$More............: 'False' (Standart) Ein duchlauf dann wird $RAS gelöscht : 'True' Ein Speicher für wiederholten aufruf.
    ; !Wichtig! Bool ist zu verwenden
    ;Return Value(s)..: Array mit den gefundenen Dateien u. o Ordner u. o. Array[0] endhält die anzahl (Fund)
    ;Author(s)........: Kleiner (http://www.autoit.de) # 11.02.2011 00:00 #
    ;====================================================================================================================================#

    [/autoit]

    Lg Kleiner

  • Super Funktion,

    schnell und einfach zu handeln.

    Danke.

    Was ich persoenlich fuer schade halte, ist die Verwendung von globalen Variablen,
    da diese ja auch an das "Hauptprogramm" zurueck gegeben werden !


    Servus,
    Euer Cubaner

  • Hallo Kleiner,

    Danke für die schnelle Antwort. Leider findet die Funktion mit dem Parameter "3" gar keine Datei wohingegen der Aufruf mit dem Parameter "1" alle Dateien aus dem angegebenen Verzeichnis abwärts auflistet. ?(

    Ich habe daher für mich nachfolgende Lösung gefunden:

    $TrefferFileHandle = FileOpen(@ScriptDir & "\Treffer.txt",2)
    $FileListe = _FileListToRekursiv("D:\","*",1,0,0,False)

    If $FileListe[0] > 0 Then
    For $i = 1 to $FileListe[0]
    If StringInStr($FileListe[$i],"xyz123.dat") > 0 Then FileWriteLine($TrefferFileHandle,$FileListe[$i])
    Next
    EndIf
    FileClose($TrefferFileHandle)

    ShellExecute(@ScriptDir & "\Treffer.txt")
    Exit

    Nicht so elegant, klappt aber ganz gut. Vielleicht hast Du ja noch eine Idee, warum die "direkte" Suche nicht klappen will. Mein System ist übrigens ein Win 7 Ultimate - aber ich gehe mal davon aus, daß es daran nicht liegt, oder? :P

    Viele Grüße
    TheDude

    Cuiusvis hominis est errare, nullius nisi insipientis in errore perseverare.
    [Cicero, Philippica 12,2]

  • Hi !


    Ich kann mir nicht vorstellen warum die suche bei dir nicht Funktioniert.

    Beispiel:

    [autoit]

    #include 'Array.au3'

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

    Local $SuchFile[2] = ['.dat', 'xyz123.dat']

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

    For $i = 0 To 1
    $SuchFileSave = _FileListToRekursiv('D:\', $SuchFile[$i], 3)
    If IsArray($SuchFileSave) Then
    For $e = 1 To $SuchFileSave[0]
    ConsoleWrite('+> Suche nach: ' & $SuchFile[$i] & @TAB & 'Gefunden: ' & $SuchFileSave[$e] & @CR)
    Next
    Else
    ConsoleWrite('!> Kein Fund - Suche nach: ' & $SuchFile[$i] & @CR)
    EndIf
    ;_ArrayDisplay($SuchFileSave)
    Next

    [/autoit]

    Bei mir werden alle Datein auf allen Patitionen gefunden?


    Lg Kleiner

  • Hallo Kleiner,

    ... kurios: Alle .pdf (ich habe es mit .pdf laufen lassen) werden gefunden - nicht jedoch die Datei 'xyz123.dat' (die Datei hatte ich extra in einem Unterverzeichnis angelegt). Ich hatte die entsprechende Zeile geändert in: Local $SuchFile[2] = ['.pdf','xyz123.dat']

    Muß denn der String ein Array sein?

    Viele Grüße
    TheDude

    Nachsatz: Mir ist vorhin aufgefallen, daß die Suche nach Dateinamen case-sensitiv ist: .pdf gibt Treffer zurück, .PDF nicht. Wenn ich den Dateinamen groß schreibe (xyz123.DAT) dann findet die Funktion auch etwas. Ist dies so beabsichtigt?

    Cuiusvis hominis est errare, nullius nisi insipientis in errore perseverare.
    [Cicero, Philippica 12,2]

  • Hi Leute!


    zur Zeit habe ich kein Internet, 3 Monate noch dann ist es soweit.

    Ich habe die Funktion erweitert.

    Update Post#1
    viel spass bis die Tage 8)

  • Hallo Kleiner,

    wegen der "Case-Sensitive"-Sache: Wäre es möglich, hierfür einen Parameter in die Funktion einzubauen? Beim Suchen weiß ich ja zunächst nicht, ob im Dateinamen große und kleine Buchstaben vorkommen.

    Wäre (für mich zumindest) eine hilfreiche Erweiterung. :D

    Vielen Dank vorab,
    liebe Grüße

    TheDude

    Cuiusvis hominis est errare, nullius nisi insipientis in errore perseverare.
    [Cicero, Philippica 12,2]

  • Hi TheDude!


    Ja das ist möglich nur überflüssig, "weil" die Funktion ist so Flexibel das, sie diesen Parameter nicht braucht, nutz das RegExp Match!
    Wenn du denn noch die Funktion ubauen möchtes stehen dir alle Türen offen. :)

    Beispiel: Schreib Flag 3 besser gesagt leg Flag 3 auf StringInStr aus. ;)


    Lg Kleiner

  • Hallo Kleiner,

    ... sorry, aber ich probiere hier rum wie ein Wilder und bekomme es nicht hin. Kannst Du mir bitte ein kleines Beispiel posten, wie ich den Aufruf der Funktion gestalten muß, damit ich nicht über dieses Case-Sensitiv stolpere. ?(

    Vorab vielen Dank,
    Grüße

    TheDude

    Cuiusvis hominis est errare, nullius nisi insipientis in errore perseverare.
    [Cicero, Philippica 12,2]