Wann ist das File geschrieben

  • Man muss ein z.B. ini file schreiben, weiss aber nicht wann das File fertig geschrieben ist - wenn man gleich anschliesend die dazugehörige Anwendung starten will helfe ich mir immer mit einem sleep. Das sit irgendwie unbefriedigend.

    hier ein kleines Beispiel:


    _FileWriteFromArray ( $lw_usb &':\starter\psstart\PStart.xml', $a_textlines, 1)
    Sleep (3000)
    run ($lw_usb & ':\starter\psstart\PStart.exe')

    die pstart.exe benötigt die pstart.xml Datei (Konfigurations Daten) wie kann ich feststellen, dass die Datei gfertig geschrieben ist?


    Danke für Eure Hilfe

    Peter

    Hinweise auf Suchmaschinen finde ich überflüssig - wer fragt hat es nicht gefunden oder nicht verstanden. Die Antwort gibt sich oftmals schneller als der Hinweis auf Dr. Goggle & Co.

    Ab 19-10-22 ergänzt um:

    Die Welt wird nicht bedroht von den Menschen, die böse sind, sondern von denen, die das Böse zulassen. (Albert Einstein)

  • Prüfe doch die Rückgabe von _FileWriteFromArray, die Funktion gibt 1 bei Erfolg zurück. Zu diesem Zeitpunkt wurde das Array erfolgreich geschrieben. Auch wenn es noch nicht unbedingt physisch auf der Festplatte ist sollte doch das BS wissen wo es das File auszulesen hat. Also einfach den Sleep weglassen und vorsichtshalber zuvor auf Fehler prüfen.

  • Du kannst an FileWriteFromArray auch ein Filehandle übergeben. Also:

    Code
    $hFile = FileOpen(...)
    _FileWriteFormArray($hFile, ...)
    FileClose($hFile) oder FileFlush($hFile) wenn Du mehrere Schreiboperationen durchführen willst.
  • @'autoBert
    danke für Deinen Beitrag, der öffnet erst den richtigen "Blick". Ich werde den Rückgabewert prüfen.

    Meine Frage zielt aber tatsächlich auf die physischer FERTIGE Existenz des Files ab. Insbesonders wenn es keine schnelle Platte sondern z.B. ein vergleichsweise langsammer usb Stick ist.
    Gibt es eine Lösung zu prüfen ob das File ferig GESCHRIEBEN ist?

    Gruß
    Peter

    Hinweise auf Suchmaschinen finde ich überflüssig - wer fragt hat es nicht gefunden oder nicht verstanden. Die Antwort gibt sich oftmals schneller als der Hinweis auf Dr. Goggle & Co.

    Ab 19-10-22 ergänzt um:

    Die Welt wird nicht bedroht von den Menschen, die böse sind, sondern von denen, die das Böse zulassen. (Albert Einstein)

  • @water

    Hallo Water,
    so richtig habe ich das mit den Handels (leider) noch nie verstanden. Darum mach ich auch immer einen Bogen darum.

    Verstehe ich das richtig, dass ducrch den close Befehl sichergestellt ist, das das File physisch vollständig und durch andere Programme benutzbar ist?

    Danke für eine kurze Erklärung.

    -- Meine Beiträge haben sich überschnitten---

    Danke

    Peter

    Hinweise auf Suchmaschinen finde ich überflüssig - wer fragt hat es nicht gefunden oder nicht verstanden. Die Antwort gibt sich oftmals schneller als der Hinweis auf Dr. Goggle & Co.

    Ab 19-10-22 ergänzt um:

    Die Welt wird nicht bedroht von den Menschen, die böse sind, sondern von denen, die das Böse zulassen. (Albert Einstein)

  • FileClose schreibt den Puffer auf die phyische Disk und schließt die Datei.
    FileFlush schreibt nur den Puffer auf die Platte und lässt die Datei offen.

  • Bei Benutzung des Filehandles ist nach FileClose exakt die selbe Situation wie bei Benutzung eines FilePath. Die Datei wurde dem BS zum schreiben übergeben befindet sich aber evtl. noch in einer Warteschlange. Wenn das BS vor dem vollständigen Zurückschreiben eine Leseanfrage bekommt wird das File direkt aus dieser Warteschlange ausgelesen. Bei USB-Sticks musst du nur darauf achten das der Stick nicht vor dem vollständigen zurückschreiben entfernt wird, also immer Hardware sicher entfernen benutzen.
    Du kannst ja auch mit FileExists prüfen ob die Datei existiert bzw. mit FileGetTime prüfen ob sie aktuell ist.

  • @autoBert

    Danke.

    Leider geht das mit dem File_exist nicht, da das file schon (mit, teilweise anderem Inhalt) schon vorher existiert hat.
    Das mit dem Zeitstempel ist ein netter Ansatz - > verfolge ich mal

    Verstehe ich das richtig, dass sich das BS um die saubere Abwicklung kümmert?

    Danke

    Peter

    Hinweise auf Suchmaschinen finde ich überflüssig - wer fragt hat es nicht gefunden oder nicht verstanden. Die Antwort gibt sich oftmals schneller als der Hinweis auf Dr. Goggle & Co.

    Ab 19-10-22 ergänzt um:

    Die Welt wird nicht bedroht von den Menschen, die böse sind, sondern von denen, die das Böse zulassen. (Albert Einstein)

  • danke

    ich denke mal closed

    Hinweise auf Suchmaschinen finde ich überflüssig - wer fragt hat es nicht gefunden oder nicht verstanden. Die Antwort gibt sich oftmals schneller als der Hinweis auf Dr. Goggle & Co.

    Ab 19-10-22 ergänzt um:

    Die Welt wird nicht bedroht von den Menschen, die böse sind, sondern von denen, die das Böse zulassen. (Albert Einstein)