Schleife stoppt ohne Fehlermeldung (Probleme mit FileWriteLine?)

  • Hallo,

    ich schreibe das erste mal hier im Forum, habe mir aber schon ein paar mal über suchen Hilfe geholt. Aber diesmal hat sich nichts aufschlussreiches ergeben.
    Also hier mein Problem:

    Ich wollte für ein Skript, das alte Dateien ab einem bestimmten Alter löschen soll, eine Logdatei erstellen, damit ich sehen kann, ob es funktioniert. Innerhalb der Schleife, die sich die Dateien "anguckt", schreibt es dann in eine .txt-Datei. Aber nach 254 (bzw. 507) Schleifendurchläufen schreibt er nichts mehr in meine Datei. Hab es mit For ... To und mit While ... WEnd versucht - mit dem gleichen ergebnis.
    Hier test-Code:

    Spoiler anzeigen
    [autoit]

    $log = "O:\test\Log.txt"
    $text = "Hier läuft eine Schleife..."

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

    For $i = 1 to 500
    FileOpen($log, 1)
    FileWriteLine($log, $i & " " & $text)
    FileClose($log)
    Next

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

    Sleep(10000)

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

    FileOpen($log, 1)
    FileWriteLine($log, " ")
    FileWriteLine($log, $i & " " & $text)
    FileClose($log)

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

    $a = 1
    while $a <= 1000
    FileOpen($log, 1)
    FileWriteLine($log, $a & " " & $text)
    FileClose($log)
    $a += 1
    WEnd

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

    Sleep(10000)

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

    FileOpen($log, 1)
    FileWriteLine($log, " ")
    FileWriteLine($log, $a & " " & $text)
    FileClose($log)

    [/autoit]


    Das ergebnis sieht dann so aus:
    1 Hier läuft eine Schleife...
    [...]
    500 Hier läuft eine Schleife...

    501 Hier läuft eine Schleife...
    1 Hier läuft eine Schleife...
    [...]
    7 Hier läuft eine Schleife...

    Bei der zweiten Schleife ist dann bei 7 einfach Schluss, ohne Fehlermelung oder sonstwas...
    Wenn ich nur außerhalb der Schleife schreiben lasse, geht die auch gerne 1500 mal durch.

    Hat AutoIt Probleme mit Schreiben in Schleifen oder was könnte das sein?


    Grüße
    kleine_ratte *Quiek*

    Einmal editiert, zuletzt von kleine_ratte (26. November 2010 um 16:15)

  • Autoit hat meines Wissens keine Probleme mit dem Schreiben in Dateien.
    Was mir aber sofort auffällt ist dass du Fileopen und FileClose falsch verstanden hast.
    Fileopen nimmt man wenn man oft auf eine Datei zugreift (was ja bei dir der Fall ist)
    Man schließt die Datei aber am besten erst wenn man mit den Dateizugriffen fertig ist.
    In deinem Script werden die Log-Datei zwar immer wieder geöffnet aber das Dateihandle nicht verwenden.
    Wieso es nur bis zu einer bestimmten Zahl läuft kann ich mir nicht erklären. Aber ich würde ein Autoit Problem eher ausschließen.

    Hier mal dein Script verbessert mit Fileopen und Fileclose

    [autoit]


    $log = "O:\test\Log.txt"
    $text = "Hier läuft eine Schleife..."
    $openfile = FileOpen($log, 1)

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

    For $i = 1 to 500
    FileWriteLine($openfile, $i & " " & $text)
    Next

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

    Sleep(10000)

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

    FileWriteLine($openfile, " ")
    FileWriteLine($openfile, $i & " " & $text)

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

    $a = 1
    while $a <= 1000
    FileWriteLine($openfile, $a & " " & $text)
    $a += 1
    WEnd

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

    Sleep(10000)

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

    FileWriteLine($openfile, " ")
    FileWriteLine($openfile, $a & " " & $text)
    FileClose($openfile)

    [/autoit]

    Bei mir wird die Datei richtig geschrieben. Siehe Anhang

  • Ich habe den Code so ausgeführt, wie du ihn geschrieben hast. Es hat tatsächlich korrekt funktioniert! :thumbup:

    Also muss man das FileOpen selbst als handle benutzen und erst ganz zum schluss schließen :!:
    Jetzt bin ich etwas schlauer, danke schön!