Verzeichnisstruktur Anzeigen und Auswählen

  • Hallo an alle,

    ich bräuchte eure hilfe

    Dieses kleine Script soll zuerst einige Order anzeigen, Danach soll aus dieser Auswahl ein Ordner ausgesucht werden und danach werden auch hier wieder ordner aber mit deren Datein angezeit (bzw. nur eine Art von Datei .cfg.

    Hier die Funktion die die Ordner Liefert, Definitionen und den Aufruf der Funktion

    Spoiler anzeigen
    [autoit]


    #include <Array.au3>

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

    ;Anfangspfad
    Global $fpath="Z:\blalbla\"

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

    ;Liefert die Arbeitsgruppenordner
    Global $filelist = _FileListToArrayListfirst($fpath)

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

    ;GUI für die Auswahl der Arbeitsgruppe
    $ruck = _ArrayListDisplaynow($filelist)

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

    ;Sollte die cfg´s suchen
    Global $filelist2= _FileListToArrayList($ruck)

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

    ;sollte die cfg´s anzeigen
    _ArrayListDisplaynow($filelist2)

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

    Func _FileListToArrayListfirst($Path)
    Local $Handle, $file
    Local $ArrayList=ObjCreate("System.Collections.ArrayList")

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

    $Handle=FileFindFirstFile($Path & "*.*")
    if @error then return SetError(3,3,$ArrayList)

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

    Do

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

    $file=FileFindNextFile($Handle)
    if @error then ExitLoop

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

    if StringInStr(FileGetAttrib($Path & $File), "D") Then
    $ArrayList.add($Path & $file & "\")
    ;_FileListToArrayListExtended($Path & $file & "\", $ArrayList)
    Else
    if StringRight($File,3) = "cfg" Then
    $ArrayList.add($Path & $file & "\")
    EndIf
    endif

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

    Until 0
    FileClose($Handle)
    Return ($ArrayList)
    EndFunc

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


    Diese Funktion soll die Ordner mit den CFGs ausgeben
    Basiert auf der Funktion von oben. Nur das es jetzt nochmal alle Unterordner untersucht.

    Spoiler anzeigen
    [autoit]


    Func _FileListToArrayList($Path2)
    Local $Handle3, $file
    Local $ArrayList=ObjCreate("System.Collections.ArrayList")
    local $test= ""
    $test = $Path2

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

    $Handle3=FileFindFirstFile( $test & "*.*")
    if @error then return SetError(3,3,$ArrayList)

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

    Do

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

    $file=FileFindNextFile($Handle3)
    if @error then ExitLoop
    if StringInStr(FileGetAttrib($Path2 & $File), "D") Then
    $ArrayList.add($Path2 & $file)
    _FileListToArrayListExtended($Path2 & $file & "\", $ArrayList)
    Else

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

    if StringRight($File,3) = "cfg" Then
    $ArrayList.add($Path2 & $file)
    EndIf
    endif

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

    Until 0
    FileClose($Handle3)
    Return ($ArrayList)
    EndFunc

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

    Func _FileListToArrayListExtended($Path, ByRef $ArrayList)
    Local $Folder

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

    $Handle = FileFindFirstFile($Path & "*.*")
    if @error Then return SetError(3,3,$ArrayList)
    Do
    $file=FileFindNextFile($Handle)
    if @error then ExitLoop

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

    if StringInStr(FileGetAttrib($Path & $file), "D") Then
    _FileListToArrayListExtended($Path & $file & "\", $ArrayList)
    Else
    if StringRight($File,3) = "cfg" Then
    $ArrayList.add($Path & $file)
    EndIf
    endif

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

    Until 0
    FileClose($Handle)
    Return ($ArrayList)
    EndFunc

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


    So hier das GUI

    Spoiler anzeigen
    [autoit]


    Func _ArrayListDisplaynow(ByRef $ArrayList)
    Local $opt = Opt("GUIOnEventMode",0)
    Local $GUI= GUICreate("Test",1000,536)
    Local $Combo=GUICtrlCreateCombo("",10,50,900,30)
    Local $Button=GUICtrlCreateButton("Auswahl bestätigen",100,496,121,33,0)
    Local $Abbruch=GUICtrlCreateButton("Abbruch",300,496,121,33,0)

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

    for $e in $ArrayList
    GUICtrlSetData($Combo,$e)
    Next
    Guisetstate(@SW_SHOW)
    local $ruckgabe=""
    Do
    Switch GUIGetMsg()
    case $Combo
    Local $string
    $string &=Guictrlread($Combo) & "|"
    Local $Array
    Local $Edit
    $Array= StringSplit(StringTrimRight($string,1), "|")
    $Edit = GUICtrlCreateEdit("",20,150,500,200,0x0800)

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

    Global $text=""
    for $i = 0 to UBound($Array) -1
    $text = $Array[$i] & @CRLF
    Next

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

    GUICtrlSetData($edit, $text)

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

    $ruckgabe =$text
    case -3
    ExitLoop
    Case $Button
    GUIDelete ($GUI)
    return $ruckgabe
    Case $Abbruch
    ExitLoop
    EndSwitch
    Until 0

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

    GUIDelete ($GUI)
    Opt("GUIOnEventMode", $opt)
    EndFunc

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

    Die Ordner zur Vorauswahl werden angezeigt aber ich kann das Ergebnis aus der GUI nicht an die 2. Funktion zum Suchen der .cfg´s geben. Bzw. versteht die Funktion nicht was in der Variablen $ruck steht. Obwohl ja da auch nur ein Pfad (String) ist. Ich versteh nicht warum dies so ist. Es wird genau ein Pfad zurück.
    In der 1. Funktion funktioniert es doch auch mit dem vordefinierten Pfad.

    Habe ich etwas übersehen?

    Vielen Dank

    MOE

    Falls irgendwas unklar ist sofort schreiben :)

    Einmal editiert, zuletzt von masterofeye (2. Juni 2011 um 11:58)

  • Hallo masterofeye,

    herzlich willkommen im Forum und viel Spass mit AutoIt.

    Hier kannst du dir die deutsche Hilfe herunterladen.
    Hier gibt es ein AutoIt-Tutorial: http://wiki.autoit.de/wiki/index.php/TutorialSehr hilfreich ist auch das Buch von peethebee

    und jetzt zu dxeinem Problem: Zum Ordner auswählen gibt es

    [autoit]

    FileSelectFolder

    [/autoit]

    Poste doch bitte ein zusammenhänges Skript und nicht nur Puzzlestücke dann schaut sich das auch bestimmt jemand an,,

    mfg autoBert

  • Danke dir AutoBert,

    ich empfand es als besser lesbar den Code aufzuteilen aber nun gut :).
    Das hat mir schon gereicht. Nun nimmt er den String mit in die 2. Funktion warum es aber bei meiner ersten Lösung nicht geklappt hat ist mir ein Rätsel.

    Vielen Dank für die Hilfe.

    MFG

    MOE