Schreiben in die Datei in eine neue Zeile - Seite 6

 
Aleksei Stepanenko:
Sergei hat mehrere Expert Advisors, die dort arbeiten, es gibt mehrere Zeilen, es ist also ein Array. Und deshalb sieht alles hässlich aus. Maxim Kuznetsov schlug SQL vor, das ist der richtige Weg für diese EAs, miteinander zu kommunizieren.

Aber die Zeilen werden eine nach der anderen gelesen und irgendwie wird die richtige ausgewählt. Und dann braucht man kein Array.

Das habe ich auch gesagt, aber mql4 unterstützt kein SQLite

 

Habe ich die Bibliothek nicht angeschlossen? Oder nicht da, ich habe es vergessen.

 
Aleksei Stepanenko:

Habe ich die Bibliothek nicht angeschlossen? Oder nicht da, ich habe es vergessen.

Es scheint, dass es nicht möglich ist, eine Datei gleichzeitig zu bearbeiten, da die später gespeicherte Version der Datei gespeichert wird.

Beispiel: Programm A hat die Datei zur Bearbeitung geöffnet, gleichzeitig hat Programm B dasselbe getan, dann hat Programm A die Änderungen vorgenommen und mit FileClose gespeichert, dann hat Programm B dasselbe getan, aber wenn Programm C die Datei öffnet, zeigt es nicht die von Programm A vorgenommenen Änderungen an, sondern nur die Änderungen, die von Programm B durchgeführt und gespeichert wurden, weil Programm B die Datei später als Programm A gespeichert hat.

Dies ist jedoch nicht sicher.

Gibt es dazu irgendwelche Informationen?

 
Das gleichzeitige Arbeiten von Programmen mit einer Datei ist das größte Übel. Während der Arbeit an einer Datei muss ein EA kontrollieren, dass andere EAs diese Datei nicht lesen/schreiben können. Verwenden Sie SQL oder flag-globaleVariable oder flag-Datei. Andernfalls kommt es zu unverständlichen Fehlern, die nur schwer zu erkennen sind.
 
Aleksei Stepanenko:
Das gleichzeitige Arbeiten von Programmen mit einer Datei ist das größte Übel. Zum Zeitpunkt der Arbeit mit der Datei sollte der Expert Advisor das Verbot des Lesens/Schreibens dieser Datei durch andere Expert Advisors kontrollieren. Verwenden Sie SQL oder die globaleVariable flag oder die Datei flag. Andernfalls kommt es zu unverständlichen Fehlern, die nur schwer zu erkennen sind.

Es ist nicht so schlimm, die Aufgaben sind unterschiedlich, aber es gibt bestimmte Besonderheiten, die berücksichtigt werden müssen.

Offenbar werden die Änderungen genau zum Zeitpunkt des Schließens von FileClose gespeichert, so dass sie bis dahin niemandem auffallen.

 
Es liegt an Ihnen. Das menschliche Gehirn ist so gebaut, dass neue Ideen nur schwer zu finden sind.
 
EfremovSergey:

Es scheint, dass es nicht möglich ist, eine Datei gleichzeitig zu bearbeiten, da die später gespeicherte Version der Datei gespeichert wird.

Beispiel: Programm A hat die Datei zur Bearbeitung geöffnet, gleichzeitig hat Programm B dasselbe getan, dann hat Programm A Änderungen vorgenommen und sie mit FileClose gespeichert, dann hat Programm B dasselbe getan, aber wenn Programm C die Datei öffnet, enthält die Datei nicht die Änderungen, die Programm A vorgenommen hat, sondern nur die Änderungen, die Programm B vorgenommen und gespeichert hat, weil Programm B die Datei später gespeichert hat als Programm A.

Dies ist jedoch nicht sicher.

Gibt es dazu irgendwelche Informationen?

Es ist schwierig einzurichten, aber nicht unmöglich. Es genügt, vor dem Speichern die Zeit der letzten Änderung mit der gleichen Zeit beim Öffnen zu vergleichen. Wir lesen FILE_MODIFY_DATE, öffnen dann die Datei, nehmen Änderungen vor, lesen FILE_MODIFY_DATE erneut ,vergleichen mit dem vorherigen Datum und schließen die Datei, wenn keine Änderungen vorgenommen wurden, und speichern die Änderungen. Andernfalls verwerfen wir die Änderungen... und öffnen sie erneut. Zum Beispiel so.

 
EfremovSergey:

Es ist nicht so schlimm, die Aufgaben sind unterschiedlich, aber es gibt bestimmte Besonderheiten, die berücksichtigt werden müssen.

Offensichtlich werden die Änderungen im Moment des Schließens von FileClose gespeichert, und niemand weiß bis dahin von ihnen.

Das ist keine Tatsache.

FileFlush

Zurücksetzen aller im Datei-E/A-Puffer verbliebenen Datenauf die Festplatte.

void  FileFlush( 
   int  file_handle      // handle файла 
   );
 
Alexey Viktorov:

Schwierig einzurichten, aber nicht unmöglich. Es genügt, wenn Sie vor dem Schreiben den Zeitpunkt der letzten Änderung mit dem Zeitpunkt des Öffnens vergleichen. D.h. lesen Sie FILE_MODIFY_DATE, öffnen Sie die Datei, nehmen Sie Änderungen vor, lesen Sie erneut FILE_MODIFY_DATE, vergleichen Sie mit dem vorherigen Datum und wenn keine Änderungen vorgenommen wurden, schließen Sie die Datei und speichern die Änderungen. Andernfalls verwerfen wir die Änderungen... und öffnen sie erneut. Zum Beispiel so.

Es ist in etwa dasselbe wie die "Besetzt"-Flagge (wer zuerst kommt, mahlt zuerst), nur etwas komplizierter, aber die Idee ist interessant, ich mag sie, danke.

 
Alexey Viktorov:

Das ist keine Tatsache.

FileFlush

Zurücksetzen aller im Datei-E/A-Puffer verbliebenen Daten auf die Festplatte.

Ich bin mir nicht sicher, was dies im Zusammenhang mit FileClose save bedeutet.