fileopen / fileclose

  • frage an die experten zu fileopen und fileclose:

    ich habe in einem prog (keine includes) mehrere protokolldateien die ich alle mit $file=fileopen($varX,1) öffne und mit fileclose($file) natürlich wieder so schnell wie möglich schliesse. nun benutze ich mehre protokolldateien und öffne diese alle mit $file=..... (das prog läuft ca. 4 stunden am tage in einer schleife). es ist also immer nur eine protokolldatei geöffnet.
    ist es ratsamer je protokolldatei eine andere variable als immer $file.. zu verwenden oder ist das sogar ein muss ? irgendwie habe ich das gefühl, dass mein prog unter 3.2.0.1 immer langsamer wird. mit der alten version 3.0.x.x hatte ich nie probleme.

    vielleicht hat ja jmd. dieses phänomen schon mal gehabt ?

    gibt es für autoit einen syntaxchecker ?; fällt mir grad so ein.

    danke schon mal im voraus.

    gruss exberliner

  • Also wie du die Variable nennst ist vollkommen wurscht.

    In der Variable wird ja lediglich nur der Rückgabewert der FileOpen-Funktion gespeichert - das FileHandle.
    Das ist eine ID mit der sich in den folgenden Funktionen die zu benutzende Datei eindeutig zuordnen lässt.

    Wird eine neue Datei geöffnet und du das Handle wieder $File zuordnest wird die alte Nummer mit der neuen überschrieben - du hast also keine eindeutige Zuordnung zur alten Datei mehr.
    Du musst also zusehen das nicht mehrere Dateien gleichzeitig geöffnet sind weil wenn du jetzt beispielsweise eine Datei öffnest während die andere noch nicht geschlossen ist und du bei beiden $File als Handle-Variable genommen hast dann lässt sich die erste nicht mehr schließen da ihr Handle ja von der anderen überschrieben wurde und folglich dann die neue Datei statt der alten geschlossen wird.
    Also wenn du die gleiche Variable nimmst dann darauf achten das erst eine neue Datei geöffnet wird wenn die alte bereits geschlossen wurde.
    Oder halt verschiedene Variablennamen nehmen.

    Ach sorry ich hab voll überlesen das du geschrieben hast das sowieso nur eine Datei gleichzeitig geöffnet ist.

    Alternativ dazu kannst du das mit den FileRead und Close auch einfach weglassen.
    Macht aber nur Sinn wenn du nur einmal auf die Datei zugreifen willst.
    Wenn du nämlich FileRead/Write bzw. FileReadLine/WriteLine benutzt und anstatt dem FileHandle den Pfad direkt angibst wird die Datei für diesen Aufruf geöffnet und danach gleich wieder geschlossen.
    Wenn du jetzt also mehrmals auf die Datei zugreifen willst würde es für jeden Aufruf also geöffnet und wieder geschlossen was die Sache dann natürlich ziemlich träge macht.
    Das macht also wie gesagt nur Sinn wenn du nur einmal auf die Datei zugreifen willst.

    Zum Thema SynthaxCheck: Bei der AutoIt-Version von Scite ist Au3Check dabei - dies wäre so einer z.B.

    Einmal editiert, zuletzt von AspirinJunkie (12. September 2006 um 02:07)

  • AspirinJunkie

    danke für die klare aussage zum thema fileopen/fileclose.

    ja, das au3check. leider checkt der z.b. den fehler
    $file=fileopen($var1,1)
    ...
    fileclose($var1) nicht.
    was eigentlich fileclose($file) heissen muss. schade eigentlich.
    und genau diesen fehler habe ich auch schon gemacht :shy

    gruss exberliner

    • Offizieller Beitrag
    Zitat

    ja, das au3check. leider checkt der z.b. den fehler
    $file=fileopen($var1,1)
    ...
    fileclose($var1) nicht.
    was eigentlich fileclose($file) heissen muss. schade eigentlich.
    und genau diesen fehler habe ich auch schon gemacht :shy

    Um diesen Fehler zu entdecken müsste er schon sehr tief analysieren, denn syntaktisch ist das ja komplett richtig. Es ist eben nur logisch nicht sinnvoll, aber das liegt bei AutoIt eben in der Verantwortung des Coders ;)
    Ein zusätzliches Problem ist hier der Datentyp Variant, der Analysen erschwert, ob eine Variable vom Typ her an eine bestimmte Stelle passt.

    Du wirst also noch eine Weile selbst aufpassen müssen, was wo hinkommt...

    peethebee