Editfeld updaten

  • Oh moment, wurde vorhin aufgehalten, check ich gleich aus;)


    2min later...


    so jetzt gibbet zumindest nen Lebenszeichen, Datei konnte nicht gespeichert werden...Is doch wie verhext

  • Moin,


    in diesem Fall wird die Datei ja immer komplett gelesen bzw. geschrieben. Es macht für mich deshalb nicht viel Sinn, per FileOpen() ein Dateihandle zu erzeugen, das dann doch gleich wieder geschlossen werden muss.


    FileRead() und FileWrite() akzeptieren auch den Dateinamen. Das scheint mir hier die bessere Option.

  • Velted Ist Fileread das nicht das gleiche wie Fileopen und Fileclose?

    Zitat von Hilfe

    If a filename is given rather than a file handle - the file will be opened and closed during the function call -

    Bzgl.: Filewrite: Musste man dazu die Datei nicht auch vorher mit Fileopen (mit schreibrechten) offen haben? Kenne das nur so, da aus der Hilfe so übernommen.

  • Moin Moombas,


    das Zitat aus Deinem lBeitrag #25 gilt meiner Meinung nach auch für FileWrite().


    FileOpen() ist für mich nur da wichtig, wo wiederholt auf Teile der Datei zugegriffen werden soll oder die Codierung vom Standard abweicht.

  • Moin Moombas,


    das Zitat aus Deinem lBeitrag #25 gilt meiner Meinung nach auch für FileWrite().

    Das Könnte sein und würde Sinn machen. Da es dort jedoch nicht erwähnt wird, habe ich das bisher immer mit Fileopen gemacht.


    Edit: Ich denke ich weiß warum ich es konsequent mal immer mit Fileopen gemacht habe. Um es immer gleich zu handhaben, denn:

    Zitat von Hilfe

    To write in another mode the file must be opened with FileOpen() and the relevant flags.

  • BTT:


    Mögliche Lösung :

  • Zitat von FileWrite() -> Remarks

    If a filename is given rather than a file handle, the file will be opened and closed during the function call.

    Zitat von FileOpen()

    $FO_OVERWRITE (2) = Write mode (erase previous contents)

    Moombas, wenn Du die Datei mit $FO_OVERWRITE öffnest, wird der anschließende Aufruf von FileRead() nicht viel finden. ;)

  • Warum? Das bedeutet doch nur das die Datei komplett überschrieben wird. Warum sollte Fileopen das dann nicht finden?

    Er will ja nichts anfügen, sondern komplett ersetzen, sofern ich das richtig verstanden habe.


    ... Aber du hast teilweise Recht. Aber ansonsten würde per Standard hinten angehängt und das ist nicht das was gewünscht ist.

    Meine "Lösung" hatte jedoch einen Fehler, ist oben nun korrigiert und bestätigt meine Meinung in "Lieber mit Fileopen() und FileClose() arbeiten".

  • Hey cool MOombas dass Du noch dran gedacht hast, irgend wie hatte ich ja schon son Berrechtigungsding befürchtet, aber jetzt funktioniert es.



    Recht herzlichen Dank, tut mir echt leid dass ich immer mit so Hammerdingern komme, dachte erst ist bestimmt eher ne simplere Geschichte, wünsche allen Helfern noch eine



    angenehme Woche

  • Naja so ein "Hammerding" war es eigentlich nicht.

    Man muss sich halt mal kurz damit beschäftigen und was die Funktionen eigentlich machen/erwarten.

    Blöd ist halt manchmal wenn man sein 0815 Vorbau hat und den 1:1 in den meisten Fällen nehmen kann, dann macht man sich über solche Kleinigkeiten keinen Kopf mehr, weshalb das bei mir nun auch länger gedauert hat als nötig gewesen wäre^^

  • Moombas


    Ich habe nicht gesagt, FileOpen() würde dann nichts finden. Ich habe gesagt FileRead().


    Und noch was:

    AutoIt
    Func _Form3()
        local Const $Filename = @ScriptDir & "\test.txt"
        local $file = FileOpen($Filename)
        ...
        global $iEdit = GUICtrlCreateEdit(FileRead($file), 0, 0, 500, 400, $ES_WANTRETURN + $WS_VSCROLL + $ES_AUTOVSCROLL + $ES_MULTILINE + $WS_TABSTOP)
        ...
        FileClose($file)

    ist identisch mit

    AutoIt
    Func _Form3()
        local Const $Filename = @ScriptDir & "\test.txt"
        ...
        global $iEdit = GUICtrlCreateEdit(FileRead($Filename), 0, 0, 500, 400, $ES_WANTRETURN + $WS_VSCROLL + $ES_AUTOVSCROLL + $ES_MULTILINE + $WS_TABSTOP)
        ...

    FileOpen() mit Standardwerten bringt hier keinen Vorteil, erfordert aber ein FileClose().


    AutoIt
    Case $hButton
        $file = FileOpen($Filename, $FO_OVERWRITE)
        If FileWrite($Filename, GuiCtrlRead($IEdit)) Then
            ...
        Endif
    FileClose($file)

    sollte in der Funktion FileWrite() $file benutzen oder (wie oben) die Funktionen FileOpen() und FileClose() weglassen.

  • Velted: Ja, man kann das hier im ersten Teil auch mit dem "nur" Fileread lösen. Wie gesagt ich bevorzuge das überall gleich zu handhaben und casi4712 kann natürlich selber entscheiden was/wie er es nutzt. Da es im Endeffekt so oder so ausgeführt wird macht es effektiv keinen Unterschied (in der aktuellen Konstellation, wo es nur 1 mal verwendet wird).

    Zudem ist das Fileclose durchaus vorhanden.

    AutoIt
    Case $hButton
        $file = FileOpen($Filename, $FO_OVERWRITE)
        If FileWrite($Filename, GuiCtrlRead($IEdit)) Then
            ...
        Endif
    FileClose($file)

    sollte in der Funktion FileWrite() $file benutzen oder (wie oben) die Funktionen FileOpen() und FileClose() weglassen.

    Genau der Fall funktioniert jedoch nicht. Teste es aus!

    Edit: Im Einzelnen:


    1. Wird das filehandle ($file) mitgeschleift und erst am Ende geschlossen, sind die Daten nicht aktuell bzw. können nicht gespeichert werden, womit diese Funktion nicht mehr gegeben ist.

    2. Wird nur Filewrite genutzt, wird an das Ende der Datei der Text angehängt anstatt ihn mit dem neuen Inhalt zu ersetzen.

  • 2. Wird nur Filewrite genutzt, wird an das Ende der Datei der Text angehängt anstatt ihn mit dem neuen Inhalt zu ersetzen.

    Das hatte ich nicht mehr im Hinterkopf. FileWrite() ersetzt also das gute alte FileAppend (wie es in AutoHotkey noch immer existiert). ;)


    Es wäre nicht falsch, wenn die Hilfe-Datei darauf hinweisen würde. :rtfm:

  • Ok dann bedank ich mich noch mal abschliessend, und wo findet man nun solche essentiellen Erkenntnisse wie, das FileOpen nur Readonly liest?


    schönen Abend noch


    lf


    Chris

  • irgendwie wird außeracht gelassen das er meine Funktionen einfach benutzen kann.

    Es funktioniert.


    Grad mal aus POST #18 deinen Code kopiert meine funktionen reingesetzt und das script leicht verändert.

    sieh :


    Edit habs nochmal auf dich angepasst.


    die unnötigen stellen weggemacht und die Änderung kommentiert.


    Du solltest mit copie pase direkt loslegen können.

  • ... und wo findet man nun solche essentiellen Erkenntnisse wie, dass FileOpen nur Readonly liest?

    FileOpen ließt nicht nur Read-Only. Das ist lediglich der Standardmodus, falls kein anderer [optionaler Parameter] Mode nach dem Dateinamen angegeben wird.


    siehe Hilfe : FileOpen

    86598-musashi-c64-png

    "Am Anfang wurde das Universum erschaffen. Das machte viele Leute sehr wütend und wurde allenthalben als Schritt in die falsche Richtung angesehen."