Subscript used with non-Array vairable

  • Guten Tag zusammen,

    bekomme folgende Fehlermeldung beim starten des Programmes:


    Subscript used with non-Array variable. (Hier)


    Ich vermute es liegt an folgendem Code, Fehler kommt nur dann, wenn im Ordner $DirBackupLog noch keine Dateien vorhanden sind.

    [autoit]

    ;Func CheckLastBackup
    Func _CheckLastBackup()

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

    $aFilelist = _FileListToArray($DirBackupLog)
    Dim $aFiledate[$aFilelist[0]+1]
    For $i = 1 To $aFilelist[0]
    $aFiledate[$i] = FileGetTime($DirBackupLog & $aFilelist[$i], 0, 1)
    Next
    Global $LastLogfile = $DirBackupLog & $aFilelist[_ArrayMaxIndex($aFiledate, 1)]

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

    Local $t = _DateDiffPrepareFormat(FileGetTime($LastLogfile, 0))
    if _DateDiff("h", $t, _NowCalc()) < 2 Then ;Backup ist weniger als 2 Stunden her
    Return 1
    Else
    Return 0
    EndIf
    EndFunc

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

    Func _DateDiffPrepareFormat($a)
    Return $a[0] & "/" & $a[1] & "/" & $a[2] & " " & $a[3] & ":" & $a[4] & ":" & $a[5]
    EndFunc

    [/autoit]


    Kann wer helfen?

  • Wenn der Ordner leer ist wird auch kein Array erstellt.
    Du versuchst dann dennoch die Variable $aFilelist als Array anzusprechen was zum genannten Fehler führt.
    Prüfe daher direkt nach _FileListToArray auf @Error.
    Und zwar genauer auf @error = 4. Denn das bedeutet laut Hilfe zu _FileListToArray, dass der Ordner leer war und deswegen kein Array zurückgegeben wird.

  • Für Leute mit dem gleichen Problem..

    [autoit]

    ;Func CheckLastBackup
    Func _CheckLastBackup()

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

    $aFilelist = _FileListToArray($DirBackupLog)
    If IsArray($aFilelist) <> 0 Then

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

    Dim $aFiledate[$aFilelist[0]+1]

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

    For $i = 1 To $aFilelist[0]
    $aFiledate[$i] = FileGetTime($DirBackupLog & $aFilelist[$i], 0, 1)
    Next
    Global $LastLogfile = $DirBackupLog & $aFilelist[_ArrayMaxIndex($aFiledate, 1)]

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

    Local $t = _DateDiffPrepareFormat(FileGetTime($LastLogfile, 0))
    if _DateDiff("h", $t, _NowCalc()) < 2 Then ;Backup ist weniger als 2 Stunden her
    Return 1
    Else
    Return 0
    EndIf
    EndIf

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

    EndFunc

    [/autoit]


    Habs so lösen können, vielen Dank.