Ich habe versucht, eine 200 Zeichen lange Zeichenkette in eine Datei zu schreiben und erhielt eine Fehlermeldung wegen Überschreitung der Array-Größe in Zeile 214 der Bibliothek. Es stellte sich heraus, dass die Größe des Headers bei der Bestimmung der Größe des empfangenden Arrays nicht berücksichtigt wird.
string control_text = "Unsere Mutti weint laut, weil alle so viel essen. Sei still, Mutti, weine nicht! Die anderen haben die gleiche Scheiße...";
string NAME_MAPPING = "Local\\" + Symbol() + "_" + (string)ChartID();
uchar Data_sender[];
int size_data = StringToCharArray(control_text, Data_sender);
//--- Erstellen eines Speicherobjekts
CMemMapFile* MappingFile = new CMemMapFile();
//--- Erstellen einer Datei für die Aufzeichnung long err = MappingFile.Open(NAME_MAPPING, size_data+4, modeCreate);
//--- Daten in Datei schreiben
err = MappingFile.Write(Data_sender, size_data);
//--- Den Datensatz schließen
MappingFile.Close();
//--- Löschen des Zeigers delete MappingFile;
uchar Data_receiver[];
ArrayResize(Data_receiver, size_data);
//--- Erstellen eines Speicherobjekts
CMemMapFile* MF = new CMemMapFile();
//--- Öffnen Sie die Datei zum Lesen
err = MF.Open(NAME_MAPPING, size_data+4, modeOpen);
//--- Сдвигаем указатель чтения на начало файла
MF.Seek(0,SEEK_SET);
//--- Читаем данные из файла
err=MF.Read(Data_receiver, size_data);
//--- Schließen Sie die Datei
MF.Close();
//--- Löschen des Zeigers delete MF;
Print(CharArrayToString(Data_receiver));
Ich habe die Abmessungen herausgefunden. Aber ich habe versucht, die Datei mit einem anderen Objekt zu lesen, und die Ausgabe war still. Wo liegt der Fehler?
Ich habe die Abmessungen herausgefunden. Aber ich habe versucht, die Datei mit einem anderen Objekt zu lesen, und bekam Schweigen in der Ausgabe. Wo liegt der Fehler?
//--- Den Datensatz schließen
Es heißt nicht "Schließen eines Datensatzes", sondern "Schließen und Löschen einer Datei ".
Das ist der Grund
//--- Öffnen Sie die Datei zum Lesen
Sie versuchen, etwas zu öffnen, das nicht existiert.
Es heißt nicht "Schließen des Datensatzes", sondern "Schließen und Löschen der Datei ".
Das ist der Grund
Sie versuchen, etwas zu öffnen, das nicht existiert.
Okay, das macht Sinn. Ich bin der Analogie zur Arbeit mit normalen Dateien gefolgt, wo das Schließen genau zum Schließen und Freigeben führt, nicht zum Löschen der Datei.
Zumindest versuchen Sie nicht, eine Datei im Speicher zu lesen, nachdem Sie den Computer neu gestartet haben...
Ich verstehe also, dass ich auf diese Weise keine Daten zwischen zwei Terminals durch den Speicher übertragen kann?
Und was ist der richtige Weg? Ich muss die Übertragung eines Textstrings von einem Terminal zum anderen mit MemMapLib.mqh implementieren .
Ich verstehe also, dass ich auf diese Weise keine Daten über den Speicher zwischen zwei Terminals übertragen kann?
Sie können
Sie müssen die Übertragung einer Textzeile von einem Terminal zum anderen mit MemMapLib.mqh implementieren .
eine Datei erstellen, sie schreiben und dann lesen.
ungefähr in dieser Reihenfolge
https://www.mql5.com/de/code/10571
Wie groß ist die maximale Datenmenge, die ich in eine geöffnete Datei im Speicher schreiben und dann lesen kann?
Nach 4096 stürzt der Expert Advisor an diesem Punkt ab.
Hallo, im obigen Code sollte "return(0)" in "return(m_hmem)" korrigiert werden, sonst wird das Handle der Memory-Mapped-Datei nicht zurückgegeben.
Ich habe versucht, eine 200 Zeichen lange Zeichenkette in eine Datei zu schreiben und erhielt eine Fehlermeldung wegen Überschreitung der Array-Größe in Zeile 214 der Bibliothek. Es stellte sich heraus, dass die Größe des Headers bei der Bestimmung der Größe des empfangenden Arrays nicht berücksichtigt wird.
Es klappt.
Funktioniert nicht.
Geben Sie mir den Code und die Spindel
Es funktioniert nicht.
Geben Sie mir den Code und den Ausdruck
Ich habe die Abmessungen herausgefunden. Aber ich habe versucht, die Datei mit einem anderen Objekt zu lesen, und die Ausgabe war still. Wo liegt der Fehler?
Ich habe die Abmessungen herausgefunden. Aber ich habe versucht, die Datei mit einem anderen Objekt zu lesen, und bekam Schweigen in der Ausgabe. Wo liegt der Fehler?
//--- Den Datensatz schließenEs heißt nicht "Schließen eines Datensatzes", sondern "Schließen und Löschen einer Datei ".
Das ist der Grund
//--- Öffnen Sie die Datei zum LesenSie versuchen, etwas zu öffnen, das nicht existiert.Es heißt nicht "Schließen des Datensatzes", sondern "Schließen und Löschen der Datei ".
Das ist der Grund
Sie versuchen, etwas zu öffnen, das nicht existiert.Okay, das macht Sinn. Ich bin der Analogie zur Arbeit mit normalen Dateien gefolgt, wo das Schließen genau zum Schließen und Freigeben führt, nicht zum Löschen der Datei.