_FileListTreeToArray UDF

  • Hi!
    Nach einigem suchen und probieren habe ich eine Funktion geschrieben die es ermöglicht nicht nur den Inhalt eines einzelnen Ordners in ein Array zu laden, sondern mit dem CMD-Befehl "dir" ganze Verzeichnisstrukturen in ein Array zu lesen.
    Die Funktion dauert manchmal was länger, hohe CPU-Auslastung bei großen Strukturen.
    senthor
    Aktuelle, fehlerbereinigte Version: Der Inhalt kann nicht angezeigt werden, da er nicht mehr verfügbar ist.

    7 Mal editiert, zuletzt von senthor (11. Februar 2009 um 17:53)

    • Offizieller Beitrag

    Das Script enthält noch Fehler:

    Zum einen fehlt (vermutlich) ein AND in der Zeile 51 (Syntax Error):

    [autoit]


    If StringLen($wSort) <> 1 or $wSort <> "N" and $wSort <> "S" and $wSort <> "E" $wSort <> "D" and $wSort <> "G" and $wSort <> _
    "" then return 1

    [/autoit]

    Zum anderen wird das SystemDir eingelesen, wenn ich 'c:\' als Pfad übergebe:

    [autoit]


    #include<Array.au3>
    $array = _FileListTreeToArray('c:\')
    _ArrayDisplay($array)

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

    [...]

    [/autoit]
  • Ja, ich hab nur keinen Plan wieso...
    in der cmd steht ein "µ", autoit liest über stdout und fileread aber ein "æ".
    hat vllt. was mit ansi-ascii zu tun???
    senthor

    EDIT:
    Fehler lässt sich folgendermaßen fabrizieren:
    1. Datei mit Umlauten, z.B. "µ.txt" erstellen, z.B. C:\Autoit\µ.txt
    2. In Ausführen "cmd /c dir C:\Autoit /A /B /O>C:\Autoit\Dummerfehler.txt" eingeben, C:\Autoit durch den Pfad ersetzen in dem die oben erstellte Datei ist, Enter
    3. In Ausführen "notepad C:\Autoit\Dummerfehler.txt" eingeben, C:\Autoit durch den Pfad ersetzen in dem die oben erstellte Datei ist, Enter
    4. In Notepad öffnet sich die Datei mit einem Eintrag "æ.txt"

    Ich hab sogar gefunden wieso:
    Nennt sich "Ascii code mit DOS-Erweiterung", is so zwischen ascii und ansi
    [Blockierte Grafik: http://www.torsten-horn.de/img/ascii.gif]

    Hier kann man sehen, dass das "µ" in der linken Spalte (Ascii+DOS) in der rechten Spalte (Ansi) einem "æ" entspricht.
    Nur, wie ändert man das?

    Danke, senthor

    2 Mal editiert, zuletzt von senthor (3. November 2008 um 22:38)

    • Offizieller Beitrag

    Super! Klappt hervorragend! :thumbup:

    Um die Prozessorlast etwas zu reduzieren kann man noch ein Sleep(1) in die While...WEnd-Schleife einfügen:

    [autoit]


    While 1
    $line = StdoutRead($iStdout)
    If @error Then ExitLoop
    If $line <> "" then $sTemp &= $line
    Sleep(1)
    Wend

    [/autoit]


    Das erhöht nur unwesentlich die Gesamtdauer. Reduziert die Prozessorlast aber von >50% auf 5...8% (bei mir).