Diskussion zum Artikel "Dateioperationen über WinAPI"

 

Neuer Artikel Dateioperationen über WinAPI :

Die Umgebung MQL4 basiert auf der Konzeption der sicheren "Sandbox": Lesen und Speichern von Dateien mit der Sprache ist nur in einigen vo0rdefinierten Ordnern zulässig. Dies schützt den Benutzer von MetaTrader 4 vor der potentiellen Gefahr wichtige Daten auf der Festplatte zu beschädigen. Manchmal ist es jedoch notwendig diesen sicheren Bereich zu verlassen. Dieser Artikel widmet sich dem Problem, wie man es einfach und richtig macht.

Die Funktion _lseek() hat auch ihr Gegenstück in MQL4. Es ist FileSeek(). Die Funktion _lclose wird für das Schließen von Dateien verwendet, wie die Funktion FileClose(). Die einzige neue Funktion ist _lread(Identifikator, Puffer, Bytes), die aus der angegebenen Datei (der Zeiger bei ihr muss vorläufig durch die Funktion _lopen() empfangen werden) ) in die Variable 'buffer' die angegebene Anzahl an Bytes liest. Sie sollten eine String-Konstante mit der benötigten Länge als 'buffer' Variable verwenden. In diesem Beispiel erkennen wir:

    string char1="x";
    result=_lread (handle,char1,1);

- die gegebene String Konstante 'char' hat eine Länge von eins, das heißt, sie erlaubt nur ein Byte in ihr zu lesen. Gleichzeitig spielt der Wert dieser Konstante keine Rolle: es kann beides sein, "x", "Z" und sogar " " (das Leerzeichen). Sie werden nicht in der Lage sein mehr Bytes in ihr zu lesen, als ursprünglich für diese Konstante festgelegt wurde. In diesem Fall, wären die Versuche 2 oder mehr Bytes zu lesen nicht erfolgreich. Außerdem ist das Ergebnis der Funktion _lread() die Anzahl der wirklich gelesenen Bytes. Wenn die Datei 20 Bytes groß ist und Sie versuchen einer 30-Bytes langen Variable mehr als 20 Bytes zu lesen, wird die Funktion 20 zurückgeben. Wenn wir diese Funktion nacheinander anwenden, bewegen wir uns entlang der Datei und lesen einen Block der Dateien nach dem anderen. Zum Beispiel, eine Datei ist 22 Bytes groß. Wir beginnen sie in Blöcken von 10 Bytes zu lesen. Dann, nach zwei Aufrufen der Funktion __lread(handle, buff, 10), bleiben zwei Bytes am Ende der Datei ungelesen.

Autor: MetaQuotes Software Corp.

 

Und warum funktioniert der Code im MT5 nicht ?

 
Otto Pauser:

Und warum funktioniert der Code im MT5 nicht ?

Der original Artikel wurde am 3 июля 2008, 13:44 veröffentlicht. Es gibt andere (google) Beispiele die gehen zumindest in MT4!

Schau mal der hier: https://www.mql5.com/de/articles/115.

Da die Pipes ja eigentlich auch Files sind, könnte das ein Beispiel sind, wie sie verwendet werden können.

Oder hier?

Oder Du legst eine 'Junction' des Template-Folders dort hin, wo die Mt5-File-Funktionen zugreifen können, so zB.
Eine DLL-freie Lösung für die Kommunikation zwischen Terminals von MetaTrader 5 mithilfe von Named Pipes
Eine DLL-freie Lösung für die Kommunikation zwischen Terminals von MetaTrader 5 mithilfe von Named Pipes
  • 2016.03.09
  • investeo
  • www.mql5.com
Dieser Beitrag beschreibt die Umsetzung der Interprozesskommunikation zwischen Client Terminals von MetaTrader 5 mithilfe von Named Pipes. Für die Nutzung von Named Pipes wird die Klasse CNamedPipes entwickelt. Um sie zu testen und um den Durchsatz der Verbindung zu messen, werden die Scripts für den Tick-Indikator, den Server und den Client vorgestellt. Die Nutzung von Named Pipes ist für Echtzeitgebote geeignet.
 
Simply doesn t work in MT4 either!
 
reteid2222:
Simply doesn t work in MT4 either!
Doch , ich verwende sie!