Sie verpassen Handelsmöglichkeiten:
- Freie Handelsapplikationen
- Über 8.000 Signale zum Kopieren
- Wirtschaftsnachrichten für die Lage an den Finanzmärkte
Registrierung
Einloggen
Sie stimmen der Website-Richtlinie und den Nutzungsbedingungen zu.
Wenn Sie kein Benutzerkonto haben, registrieren Sie sich
Soweit ich weiß, muss die Datei nicht geschlossen werden, wenn sie nicht mit Hilfe von Dateifunktionen (z. B. FileWrite()) geändert wurde. Die Funktion FileOpen() erstellt einfach eine neue Datei, und dieser Vorgang erfordert nicht das Schließen der Datei (in der Dokumentation zu dieser Funktion steht auch nicht, dass die Datei nach der Erstellung geschlossen werden muss).
Oy-lee! storyteller https://docs.mql4.com/ru/files/fileopen
//--- die korrekte Art und Weise, in der "Datei-Sandbox" zu arbeiten
ResetLastError();
filehandle=FileOpen("fractals.csv",FILE_WRITE|FILE_CSV);
if(filehandle!=INVALID_HANDLE)
{
FileWrite(filehandle,TimeCurrent(),Symbol(),EnumToString(ENUM_TIMEFRAMES(_Period));
FileClose(filehandle);
Print("FileOpen OK");
}
sonstPri
Oy-lee! storyteller https://docs.mql4.com/ru/files/fileopen
Wo ist der Widerspruch zu dem, was ich gesagt habe?
Ich sagte, -
Retag Konow:
Soweit ich weiß, muss die Datei nicht geschlossen werden, wenn sie nicht mit Hilfe von Dateifunktionen (z. B. FileWrite()) geändert wurde. Die Funktion FileOpen() legt lediglich eine neue Datei an, und dieser Vorgang erfordert nicht das Schließen der Datei (auch in der Dokumentation zu dieser Funktion steht nicht, dass die Datei nach der Erstellung geschlossen werden muss).
In Ihrem Beispiel wird die Funktion FileWrite() jedoch unmittelbar nach der Erstellung der Datei verwendet. Und dann verwenden Sie FileClose(filehandle);
Außerdem habe ich im obigen Skriptcode eine explizite Schließung hinzugefügt, aber das hat nichts gebracht...
Und zwar genau so. Wenn ich versuche, einen Ordner zu löschen, der bereits Unterordner und Dateien enthält, lösche ich zuerst die Dateien. Nur die Unterordner bleiben erhalten. Ich versuche, sie mit FolderClean() zu bereinigen und rufe dann FolderDelete() auf. Das Ergebnis ist jedoch, dass die leeren Unterordner zwar gelöscht werden, aber wenn sich innerhalb der Unterordner weitere Unterordner befanden, werden diese nicht gelöscht. Danach versuche ich, die Ordner manuell aus dem Dateinavigator in MetaEditor zu entfernen, aber das Terminal entfernt sie nicht und zeigt dieses Fenster an:
Ich klicke auf "Weiter", stimme den Änderungen zu, aber der Ordner wird immer noch nicht gelöscht. Nach dem vollständigen Schließen und erneuten Öffnen des Terminals verschwinden die Ordner, die gelöscht werden sollten, entweder von selbst oder nicht, aber Sie können sie sofort und manuell ohne das obige Fenster löschen.
Solche seltsamen Dinge...
Ich habe diese Art von Dingen schon oft gesehen. Ich habe herausgefunden, dass der Ordner "Dateien" mit all seinen Unterordnern und Dateien irgendwann das Attribut "schreibgeschützt" erhält. Die manuelle Deaktivierung dieser Markierung hilft nicht. Aber ein Neustart des Terminals hilft immer. Ich konnte es nicht abspielen (habe es nicht versucht), also habe ich es nicht an SD gemeldet.
Der Fehler (5022) tritt nur auf, wenn Sie FILE_COMMON
Der Ordner wird geleert, aber nicht gelöscht.
Dieses Flag muss nicht gesetzt werden, da sonst die Datei im gemeinsamen Ordner gesucht wird und der Fehler besagt, dass der Verzeichnisname falsch ist.
Dateipfad
"\\MQL4\\Files";
muss dieses Flag nicht gesetzt sein. Es ist also alles korrekt.
Ich habe so etwas schon mehr als einmal erlebt. Ich habe herausgefunden, dass der Ordner "Dateien" mit allen Unterordnern und Dateien irgendwann das Attribut "schreibgeschützt" erhält. Die manuelle Deaktivierung dieser Markierung hilft nicht. Aber ein Neustart des Terminals hilft immer. Ich konnte es nicht abspielen (habe es nicht versucht), also habe ich es nicht an SD gemeldet.
Dieses Flag muss nicht gesetzt werden, sonst wird die Datei im öffentlichen Ordner gesucht und die Fehlermeldung lautet, dass der Verzeichnisname falsch ist.
Sowohl mit als auch ohne FILE_COMMON - es funktioniert (ursprünglich hatte ich bei der Überprüfung vergessen, dieses Flag in das letzte if zu setzen). Mit FILE_COMMON wurde impliziert, dass es bei allen Vorgängen vorhanden ist
Dieses Flag muss nicht gesetzt werden, da die Datei sonst im öffentlichen Ordner gesucht wird und der Fehler besagt, dass der Verzeichnisname falsch ist.
Der Pfad zur Datei
muss dieses Flag nicht gesetzt sein. Es ist also alles korrekt.
Das ist seltsam. Ich bemerkte die MQL4-Ordnerpfade und kompilierte den Code in .ex4 neu, und seltsamerweise funktionierte der Code ohne Fehler. Ich habe das Schließen der Datei entfernt und erhalte
Dann ohne Korrekturen lief ich es auf mt5 und seltsam genug die Erwähnung von MQL4 Ordner wurde ignoriert. Der Ordner und die Datei wurden im Ordner MQL5 erstellt. Von hier aus ist alles dasselbe wie in MT4. Eine nicht geschlossene Datei wird nicht gelöscht...
Das ist alles sehr merkwürdig. Ich bemerkte die MQL4-Ordnerpfade und kompilierte den Code in .ex4 neu, und seltsamerweise funktionierte der Code ohne Fehler. Entfernte die Dateischließung und erhielt
Dann ohne Korrekturen lief ich es auf mt5 und seltsam genug die Erwähnung von MQL4 Ordner wurde ignoriert. Der Ordner und die Datei wurden im MQL5-Ordner erstellt. Von hier aus ist alles dasselbe wie in MT4. Eine nicht geschlossene Datei wird nicht gelöscht...
Ich meine, Sie haben einen Expert Advisor aus einem Skript erstellt und versucht, ihn auszuführen?
Aber ich schließe es und das Problem bleibt... Leider...(