Ein Ordner wird nicht gelöscht, wenn er nicht geschlossene Dateien enthält. - Seite 3

 
Реter 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() 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

FileOpen - Файловые операции - Справочник MQL4
FileOpen - Файловые операции - Справочник MQL4
  • docs.mql4.com
FileOpen - Файловые операции - Справочник MQL4
 
Rashid Umarov:

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...

 
Реter Konow:

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.

 
A100:

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.

 
fxsaber:

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.

Danke. Ich bin froh, dass ich nicht der Einzige bin, der dieses Problem hat. Ich muss dieses Problem lösen (ich kann denDateinavigator nicht mehr ohne ihn verwenden). Ich habe an Servicedeck geschrieben. Aber ich schreibe auch hier, nur für den Fall. Es hat sich herausgestellt, dass es nicht umsonst war).
 
Реter Konow:

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

 
Реter Konow:

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

2017.08.28 17:36:18.525 Demo_FolderDelete EURUSD.e,H4: Не удалось удалить папку nonempty. Код ошибки=5025
2017.08.28 17:36:16.985 Demo_FolderDelete EURUSD.e,H4: Не удалось очистить папку nonempty. Код ошибки=5026

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...

2017.08.28 17:50:45.328 Demo_FolderDelete (CADJPY,H4)   Не удалось очистить папку nonempty. Код ошибки=5025
2017.08.28 17:50:47.958 Demo_FolderDelete (CADJPY,H4)   Не удалось удалить папку nonempty. Код ошибки=5024
 
Der Bedienstete antwortete. Sie sagten, dass die Datei nach der Erstellung geschlossen werden muss. Aber ich schließe es und das Problem bleibt... Leider...(
 
Alexey Viktorov:

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?

 
Реter Konow:
Aber ich schließe es und das Problem bleibt... Leider...(
Und versuchen Sie FILE_COMMON überall