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:
_FileListTreeToArray UDF
-
senthor -
2. November 2008 um 22:31
-
-
- Offizieller Beitrag
Das Script enthält noch Fehler:
Zum einen fehlt (vermutlich) ein AND in der Zeile 51 (Syntax Error):
[autoit]
[/autoit]
If StringLen($wSort) <> 1 or $wSort <> "N" and $wSort <> "S" and $wSort <> "E" $wSort <> "D" and $wSort <> "G" and $wSort <> _
"" then return 1Zum anderen wird das SystemDir eingelesen, wenn ich 'c:\' als Pfad übergebe:
[autoit]
[/autoit][autoit][/autoit][autoit]
#include<Array.au3>
$array = _FileListTreeToArray('c:\')
_ArrayDisplay($array)[...]
[/autoit] -
Hi Oscar!
Danke für die Antwort. Die genannten Fehler wurden behoben.senthor
-
- Offizieller Beitrag
Jo, soweit funktioniert es!

Aber...die deutschen Umlaute werden nicht richtig angezeigt...

-
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???
senthorEDIT:
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
-
OK, alle Fehler gefixt.
Neuste Version oben eisehbar. -
- Offizieller Beitrag
Super! Klappt hervorragend!

Um die Prozessorlast etwas zu reduzieren kann man noch ein Sleep(1) in die While...WEnd-Schleife einfügen:
[autoit]
[/autoit]
While 1
$line = StdoutRead($iStdout)
If @error Then ExitLoop
If $line <> "" then $sTemp &= $line
Sleep(1)
Wend
Das erhöht nur unwesentlich die Gesamtdauer. Reduziert die Prozessorlast aber von >50% auf 5...8% (bei mir).