FileRead-Write in der neuen Beta

    • Offizieller Beitrag

    Hmm...im AutoIt Changelog zur neuen Betaversion steht:

    Zitat

    - Changed: It is now possible to read from files opened for writing.


    Schön, dachte ich mir, braucht man nicht vorher einlesen. Also mal ein Testskript erstellt:

    [autoit]


    $sFile = @ScriptDir & '\test.txt'
    FileWrite($sFile, 'blablabla' & @CRLF) ; Datei erstellen

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

    $hFile = FileOpen($sFile, 2) ; zum Schreiben öffnen
    If $hFile <> -1 Then
    MsgBox(0, 0, FileRead($hFile)) ; Datei auslesen und anzeigen (erscheint aber nur ein Leerstring)
    FileWriteLine($hFile, Random(1000, 9999, 1))
    FileClose($hFile)
    EndIf

    [/autoit]


    In der Msgbox müsste doch eigentlich der Inhalt der Datei angezeigt werden, oder habe ich das falsch verstanden?

  • Läuft doch! Und sogar ohne FileFlush wie ich vermutet hatte.

    Spoiler anzeigen
    [autoit]

    $sFile = @ScriptDir & '\test.txt'

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

    $hFile = FileOpen($sFile, 2) ; zum Schreiben öffnen
    FileWrite($sFile, 'blablabla' & @CRLF) ; Datei erstellen
    ;~ FileFlush($hFile)
    If $hFile <> -1 Then
    MsgBox(0, 0, FileRead($hFile)) ; Datei auslesen und anzeigen (erscheint aber nur ein Leerstring)
    FileWriteLine($hFile, Random(1000, 9999, 1))
    FileClose($hFile)
    EndIf

    [/autoit]
    • Offizieller Beitrag

    So ganz stimmt da was aber nicht.
    Mit vorherigem Schreibzugriff funktioniert es:

    [autoit]


    $sFile = @ScriptDir & '\test.txt'

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

    $hFile = FileOpen($sFile, 2) ; zum Schreiben öffnen
    If $hFile <> -1 Then
    FileWriteLine($hFile, Random(1000, 9999, 1))
    FileSetPos($hFile, 0, 0)
    MsgBox(0, 0, FileRead($hFile))
    FileClose($hFile)
    EndIf

    [/autoit]


    Macht man aber zuerst den Lesezugriff, dann klappt das nicht (=Leerstring):

    [autoit]


    $hFile = FileOpen($sFile, 2) ; zum Schreiben öffnen
    If $hFile <> -1 Then
    ;~ FileSetPos($hFile, 0, 0)
    MsgBox(0, 0, FileRead($hFile))
    FileWriteLine($hFile, Random(1000, 9999, 1))
    FileClose($hFile)
    EndIf

    [/autoit]


    Egal, ob mit oder ohne FileSetPos.

    Edit: Achso, FileOpen(...,2) da wird die Datei ja neu angelegt. ^^
    Edit2: Nee, geht auch nicht mit ",1":

    [autoit]


    $sFile = @ScriptDir & '\test.txt'
    $hFile = FileOpen($sFile, 1) ; zum Anhängen öffnen
    If $hFile <> -1 Then
    MsgBox(0, 0, FileRead($hFile))
    FileWriteLine($hFile, Random(1000, 9999, 1))
    FileSetPos($hFile, 0, 0)
    MsgBox(0, 0, FileRead($hFile))
    FileClose($hFile)
    EndIf

    [/autoit]
    • Offizieller Beitrag

    Hallo,

    ist doch logisch, wenn man eine Datei im Modus 1 öffnet wird der Dateizeiger an das Ende der Datei gesetzt. Ein lesen ab dieser Position gibt natürlich nur eine Leerstring zurück.

    [autoit]

    $sFile = @ScriptDir & '\test.txt'
    $hFile = FileOpen($sFile, 1) ; zum Anhängen öffnen
    If $hFile <> -1 Then
    MsgBox(0, "Dateizeiger" ,"Der Dateizeiger steht auf Position " & FileGetPos($hFile))
    MsgBox(0, 0, FileRead($hFile))
    FileWriteLine($hFile, Random(1000, 9999, 1))
    FileSetPos($hFile, 0, 0)
    MsgBox(0, 0, FileRead($hFile))
    FileClose($hFile)
    EndIf

    [/autoit]