Problem mit _FileWriteFromArray

  • Hallo zusammen

    Ich schreibe gerade ein Script zur Verwaltung meiner Programme auf dem Server. Der Grundgedanke ist, das ich alle Ordner auf dem Server
    Aufliste und später Die Pfadie in eine MySQL Datenbank speichere. Dort werden zu jedem Programm noch zusatzinformationen gespeichert (Katigorie, Beschreibung).
    Mein Problem ist im Moment, dass ich beim Schreiben, des Arrays immer die selbe Fehlermeldung bekomme. Ich vermute es kommt von
    _FileWriteFromArray. bin mir aber nicht ganz sicher.

    Zu dem Verzeichnis ist soch zu sagen, dass es etwa 12'000 Tausend Ordner umfasst. also ziemlich gross.

    Hier mal ein Auszug von meinem Code, Printscreen der Fehlermeldund und was der Editor so auswirft

    Spoiler anzeigen
    [autoit]

    #cs ----------------------------------------------------------------------------

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

    AutoIt Version: 3.3.6.0
    Author: Storyteller

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

    Script Function:
    Programmverwaltung von instdisk.
    Das Progamm ist zur übersicht übder die Programme
    auf dem Server gedacht.

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

    #ce ----------------------------------------------------------------------------

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

    #include <ButtonConstants.au3>
    #include <ComboConstants.au3>
    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>
    #include <Array.au3>
    #include "FileConstants.au3"
    #include "File.au3"

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

    #Region ### START Koda GUI section ### Form=
    $Programmverwaltung = GUICreate("Programmverwaltung instdisk", 451, 264, 194, 113)
    $g_beschreibung = GUICtrlCreateGroup("Beschreibung", 8, 80, 433, 137)
    $e_beschreibung = GUICtrlCreateEdit("", 16, 100, 417, 105, $ES_READONLY)
    GUICtrlSetData(-1, "")
    GUICtrlCreateGroup("", -99, -99, 1, 1)
    $bt_dir = GUICtrlCreateButton("Verzeichnis öffnen", 8, 224, 137, 33, $WS_GROUP)
    $bt_update = GUICtrlCreateButton("Update", 300, 224, 137, 33, $WS_GROUP)
    $l_title = GUICtrlCreateLabel("Programmverwaltung", 8, 8, 171, 24)
    GUICtrlSetFont(-1, 12, 800, 0, "MS Sans Serif")
    $Group1 = GUICtrlCreateGroup("Programmauswahl", 8, 32, 433, 49)
    $c_type = GUICtrlCreateCombo("Typ", 16, 52, 200, 25)
    $c_prog = GUICtrlCreateCombo("Programm", 233, 52, 200, 25)
    GUICtrlCreateGroup("", -99, -99, 1, 1)
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    ;~ Case $bt_dir
    ;~ Call ("_OpenDir")
    Case $bt_update
    Call ("_Update")
    EndSwitch
    WEnd

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

    ;==============================================================================
    ; Name: _Update
    ; Description: Liest rekursiv alle Ordner im Verzeochnis X:\
    ; aus und speichert sie in ein Textfile
    ;==============================================================================
    Func _Update()

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

    ;Auflisten der Verzeichnisse
    $ret = _GetFilesFolder_Rekursiv('X:\','', 1, 1)
    If IsArray($ret) Then
    _FileWriteFromArray("C:\div\autoit\__Programmverwaltung\projekt\path.txt",$ret, 0)
    Else
    MsgBox(0, 'Fehler', $ret & @CRLF)
    ConsoleWriteError( @error)
    EndIf
    MsgBox(0,"Update","Update erfolgreich")
    EndFunc ;==>_Update

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

    ;==================================================================================================
    ; Function Name: _GetFilesFolder_Rekursiv($sPath [, $sExt='*' [, $iDir=-1 [, $iRetType=0]]])
    ; Description: Rekursive Auflistung von Dateien und/oder Ordnern
    ; Parameter(s): $sPath der Basispfad für die Auflistung ('.' -aktueller Pfad, '..' -Parentpfad)
    ; $sExt Erweiterung für Dateiauswahl '*' oder -1 für alle (Standard)
    ; $iDir -1 Dateien+Ordner(Standard), 0 nur Dateien, 1 nur Ordner
    ; optional: $iRetType 0 gibt Array, 1 gibt String zurück (Einträge @LF-getrennt)
    ; Return Value(s): Array (Standard) od. String mit den gefundenen Pfaden der Dateien und/oder Ordner
    ; Array[0] enthält die Anzahl der gefundenen Dateien/Ordner
    ; Author(s): BugFix ([email='bugfix@autoit.de'][/email])
    ;==================================================================================================
    Func _GetFilesFolder_Rekursiv($sPath, $sExt='*', $iDir=-1, $iRetType=0)
    Global $oFSO = ObjCreate('Scripting.FileSystemObject')
    Global $strFiles = ''
    If ($iRetType < 0) Or ($iRetType > 1) Then $iRetType = 0
    If $sExt = -1 Then $sExt = '*'
    If ($iDir < -1) Or ($iDir > 1) Then $iDir = -1
    _ShowSubFolders($oFSO.GetFolder($sPath),$sExt,$iDir)
    If $iRetType = 0 Then
    Local $aOut
    $aOut = StringSplit(StringTrimRight($strFiles,1), @LF)
    If $aOut[1] = '' Then
    ReDim $aOut[1]
    $aOut[0] = 0
    EndIf
    Return $aOut
    Else
    Return StringTrimRight($strFiles,1)
    EndIf
    EndFunc

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

    Func _ShowSubFolders($Folder, $Ext='*', $Dir=-1)
    If ($Dir = -1) Or ($Dir = 0) Then
    For $file In $Folder.files
    If $Ext <> '*' Then
    If StringRight($file.Name, StringLen($Ext)) = $Ext Then _
    $strFiles &= $file.Path & @LF
    Else
    $strFiles &= $file.Path & @LF
    EndIf
    Next
    EndIf
    For $Subfolder In $Folder.SubFolders
    If ($Dir = -1) Or ($Dir = 1) Then $strFiles &= $Subfolder.Path & '\' & @LF
    _ShowSubFolders($Subfolder, $Ext, $Dir)
    Next
    EndFunc

    [/autoit]
    Spoiler anzeigen

    >"C:\Program Files\AutoIt3\SciTE\AutoIt3Wrapper\AutoIt3Wrapper.exe" /run /prod /ErrorStdOut /in "C:\div\autoit\__Programmverwaltung\projekt\main_nc.au3" /autoit3dir "C:\Program Files\AutoIt3" /UserParams
    +>16:42:02 Starting AutoIt3Wrapper v.2.0.1.24 Environment(Language:0407 Keyboard:00000807 OS:WIN_7/Service Pack 1 CPU:X64 OS:X86)
    >Running AU3Check (1.54.19.0) from:C:\Program Files\AutoIt3
    C:\div\autoit\__Programmverwaltung\projekt\main_nc.au3(108,50) : WARNING: $strFiles possibly not declared/created yet
    $strFiles &= $file.Path & @LF
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
    C:\div\autoit\__Programmverwaltung\projekt\main_nc.au3 - 0 error(s), 1 warning(s)
    ->16:42:02 AU3Check ended.rc:1
    >Running:(3.3.6.1):C:\Program Files\AutoIt3\autoit3.exe "C:\div\autoit\__Programmverwaltung\projekt\main_nc.au3"
    0+>16:46:28 AutoIT3.exe ended.rc:0
    >Exit code: 0 Time: 266.870


    Danke schon im Voraus

    So long
    Storyteller

  • Die Warnung wegen der nicht deklarierten Variable erhältst du, weil du diese erst in der Funktion _GetFilesFolder_Rekursiv deklarierst. Es wird gewarnt, weil du deine andere Funktion _ShowSubFolders in der du diese Variable benutzt theoretisch auch vor der ersten aufgerufen werden könnte und diese Variable dann noch nicht existieren würde. Globale Variablen sollte man am Scriptanfang deklarieren. Alternativ wäre es vielleicht sinnvoller eine lokale Deklaration zu wählen und diese Variable dann per Parameter an die zweite Funktion zu übergeben.

    Deine Fehler msgbox erhältst du weil die Prüfung isarray offensichtlich False zurückgibt. Warum dort kein Array zurückkommt kann ich dir nicht sagen, so ganz steige ich nicht bei deinen Funktionen durch. Müsstest mal schaun was da im einzelnen gemacht wird und wieso deine Funktion kein Array liefert.

    EDIT: Ahja ist doch klar warum. Du rufst die Funktion mit Returntype 1 auf, also kommt auch ein String und kein Array zurück. Siehe Funktionsbeschreibung.

    Einmal editiert, zuletzt von misterspeed (19. April 2011 um 17:32)

  • Danke misterspeed
    Manchmal sieht man die Parameter vor lauter Funktionen nicht :)

    So long

    Storyteller

    Make it idiot proof, and someone will build a better idiot!

    Ich würd so gern die Welt verändern, aber Gott gibt mir den Quellcode nicht.