Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi SaveToFile synchron oder asynchron? (https://www.delphipraxis.net/6025-savetofile-synchron-oder-asynchron.html)

S - tefano 26. Jun 2003 17:11


SaveToFile synchron oder asynchron?
 
Hi,

wie der Betreff sagt, würde ich gerne wissen ob mein programm sofort nach Aufruf der SaveToFile- Prozedur weiterläuft, oder ob es erst wartet, bis SaveToFile beendet wurde.
Denn ich würde nachdem ich eine Ansammlung von Daten in eine Datei geschrieben hab einer anderen Anwendung mitteilen, dass sie jetzt mit der Datei weiterarbeiten kann.
Das andere Programm kann das ja nich wirklich überprüfen, denn FileExists funktioniert ja auch wenn die Datei noch garnicht zu Ende geschrieben wurde. Und das andere Programm kann dann ja nicht anfangen zu lesen, wenn noch geschrieben wird...
Also dann, sagt mir bitte was diesbezüglich Sache ist, und in welchem der beiden von mir oben genannten Fälle das Ganze synchron oder asynchron wäre ;-)
Wenns zu meinen Ungunsten stehen würde, was gäbe es für Alternativen um rauszufinden, wann SaveToFile fertig ist?

Bis dann,

S - tefano

Christian Seehase 26. Jun 2003 17:15

Moin Stefano,

SaveToFile wird irgendwann einmal CreateFile intern aufrufen müssen.
Du könntest also mal die Sourcen durchgehen und Dir ansehen wie SaveToFile arbeitet.
Bei Deiner Version sollten die Sourcen der VCL ja dabei sein.

sakura 26. Jun 2003 17:17

Re: SaveToFile synchron oder asynchron?
 
Zitat:

Zitat von S - tefano
wie der Betreff sagt, würde ich gerne wissen ob mein programm sofort nach Aufruf der SaveToFile- Prozedur weiterläuft, oder ob es erst wartet, bis SaveToFile beendet wurde.

Es wird erst gesichert. Allerdings greift an dieser Stelle der Festplatten-Cache-Mechanismus. Von daher kann es trotzdem noch zu einem Datenverlust kommen, wenn der Rechner abschmiert. Wenn Du das auch noch umgehen willst, dann musst Du vorher den Cache leeren lassen, was jedoch wiederum sehr umständlich ist, da abhängig vom OS und diese Funtionen auch nicht dokumentiert sind.

...:cat:...

S - tefano 26. Jun 2003 17:58

Hi,

also im Endeffekt scheints darauf hinauszulaufen:

Delphi-Quellcode:
Write(Buffer, Count);
Hm.
Da fällt mir gerade was ein, wie sich das alternativ machen lassen würde:
Ich könnte doch mit ner For-Schleife die Elemente (sind Strings) durchgehen und jedes per writeLn in eine Datei schreiben.
Also so mit vorher assignfile, rewrite und so. Sowas hat sich bis jetzt eigentlich immer mit ner Schleife lösen lassen. Also scheint das Prog hier erst nach dem Fertigstellen von writeLn weiterzulaufen, was mir garantiert, dass der Schreibvorgang nach der Schleife auch wirklich beendet ist.

Oder?

Bis dann,

S - tefano

sakura 26. Jun 2003 18:07

Ist das gleiche wie beim Stream, es wird erst einmal zum Cache gesandt und ist wahrscheinlich sogar langsamer, da Stream dahingehend optimiert sind.

...:cat:...

S - tefano 26. Jun 2003 18:32

Hmmmmmm
Mist, jetz hab ich die Prozedur aber schon fertig, all der Code umsonst?
Nein :!:
Juchuuu! Bei meiner Methode kann ich Fehler durch ioresult besser "handlen".
Hoff ich jedenfalls...
Die einzelnen Stings die ich abspeichere sind auch sowieso nicht allzu lang, höchstens mal 20 Zeichen, aber es sind halt sehr viele.
Und bei der heutigen Hardware...

danke.

Bis dann,

S - tefano

Christian Seehase 26. Jun 2003 19:38

Moin Stefano,

Zitat:

Zitat von S - tefano
Bei meiner Methode kann ich Fehler durch ioresult besser "handlen".

Ob es nun besser ist IoResult abfragen zu müssen, oder alles in einen try/except Block zu packen dürfte wohl auch geschackssache sein ;-)

S - tefano 26. Jun 2003 19:46

Ach Mist.
Scheint keinem was einzufallen um zu argumentieren dass ich meine eigene Prozedur nehmen sollte. Naja, mal außer der Tatsache dass die Mühe dann umsonst gewesen wäre.
Naja. Aus diesem Grund werde ich jetz einfach meine Prozedur benutzen und alles ignorieren was dagegen spricht :corky:

Danke nochmal,

S - tefano


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:46 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz