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

 

Morgen werde ich versuchen, ein Skript zu erstellen, das dieses Problem vollständig reproduziert.

Man wird also nicht sagen, dass ich hier "Fiktion" mache).

Ich danke Ihnen allen für Ihre Hilfsbereitschaft und Unterstützung bei der Lösung des Problems. ))

 

Es gab einen schwebenden Fehler wie diesen (die Sequenz ist beschrieben und eine .ex5-Datei der Bibliothek wurde beigefügt). Es ist schwierig, diese Dinge zu dokumentieren.

Forum zum Thema Handel, automatisierte Handelssysteme und Strategietests

Wanzen, Wanzen, Fragen

A100, 2016.08.04 00:05

Fehler beim Öffnen der Datei durch den Expert Advisor. Was wäre zum Beispiel, wenn.

1. einige "irrelevante Codes" entfernen (siehe unten)

2. oder entfernen Sie ::Sleep(1000)

es liegt kein Fehler vor

//Test.mq5
#import "Test001.ex5"
        string f( string file );
#import
string __Period() { return StringSubstr( EnumToString((ENUM_TIMEFRAMES)Period()), 7 ); }
void OnInit()
{
        Print( Symbol(), ",", __Period(), ", результат=", f( "test.txt" ));
}

Abfolge der Aktionen:

1. Erstellen Sie ein neues Profil (z. B. "Test")

2. Öffnen Sie zwei neue Charts und hängen Sie den Expert Advisor Test.ex5 an beide Charts an (siehe Abbildung).

4. Wählen Sie ein anderes vorhandenes Profil

5. Profil "Test" auswählen

Ergebnis:

Test001.mq5 sieht folgendermaßen aus:

//Test001.mq5
#property library
//---
//здесь некий код не имеющий отношения к делу
//---
string f( string file ) export
{
        ::ResetLastError();
        int hFile = ::FileOpen( file, FILE_READ | FILE_SHARE_READ | FILE_TXT | FILE_ANSI | FILE_COMMON );
        if ( hFile == INVALID_HANDLE )
                return ::StringFormat( "Error(%d): Не был открыт файл: %s", ::GetLastError(), file );
        ::Sleep( 1000 );
        ::FileClose( hFile );
        return "OK";
}

Ich habe es jetzt mit der beigefügten Bibliotheksdatei versucht: das Ergebnis ist das gleiche (die Testdatei wird von beiden Experten getrennt geöffnet, und wenn sie gleichzeitig geöffnet wird, meldet einer der Experten einen Fehler)
2017.08.28 23:40:43.623 Test (EURUSD,M15) EURUSD,M15, Ergebnis=OK
2017.08.28 23:40:52.389 Test (GBPUSD,M15) GBPUSD,M15, Ergebnis=OK

2017.08.28 23:41:14.387 Test (GBPUSD,M15) GBPUSD,M15, result=Error(5004): Datei wurde nicht geöffnet: test.txt
2017.08.28 23:41:15.484 Test (EURUSD,M15) EURUSD,M15, result=OK


 

Ich habe den Antrag Nr. 1530548 gefunden, aber keine Kommentare - möglicherweise wurde er bereits korrigiert. Falls nicht, bitte erneut prüfen

 

Реter Konow:

Die Datei wird von meiner Anwendung (Datei-Navigator)geöffnet, um in einem anderen Ordner überschrieben zu werden.

Wenn die Datei zum Lesen geöffnet wird , erhalten wir das Dateihandle.

Der Tag heißt Konow:

Nach dem Überschreiben muss ich die Datei schließen, kann das aber nicht (kein Handle) und lösche die Datei einfach.

Um in eine andere Datei zu schreiben, benötige ich das Handle der anderen Datei, also ist es sinnvoll, es in einer anderen Variablen zu speichern. Nach dem Schreiben in eine neue Datei werden die Handles der beiden Dateien in zwei Variablen gespeichert, und beide Dateien werden mit diesen Handles geschlossen.

Tag Konow:

Es gibt keinen Handle, da nicht bekannt ist, wann und von wem die Datei erstellt wurde.

Wenn die Datei von John Doe und John Doe erstellt wurde, ist es SEHR wahrscheinlich, dass sie von keiner Anwendung verwendet wird. Wenn Sie die Datei zu einem bestimmten Zweck öffnen, haben Sie bereits ein Handle, das Sie mit der Funktion FileOpen erhalten haben, und Sie sollten es schließen, bevor Sie den Ordner löschen.

Konow-Tag:

Die Datei befindet sich jedoch im Ordner "Dateien" und kann in einen anderen Ordner kopiert und anschließend gelöscht werden.

Beim Kopieren einer Datei aus einem zugänglichen Programm in ein mql-Programm ist das Handle der Datei absolut unnötig.

Reg Konow:

Sie können diese Datei jedoch nicht schließen, nachdem Sie sie kopiert haben. Es gibt keinen Griff.

Nach dem Kopieren der Datei ist die Datei nicht geöffnet und muss nicht geschlossen werden.

Konow-Tag:

Dies ist wahrscheinlich der Grund, warum ein weiteres Löschen von FolderClean() mit gelöschten Dateien nicht funktioniert.

Das ist ein absoluter Fehler.

RetagKonow:

Frage: Wie kann ich in einem MQL-Programm einen Zugriff auf diese Datei erhalten?

Aus den obigen Ausführungen geht hervor, dass diese Frage keinen Sinn ergibt. Das Dateihandle wird nur beim Öffnen einer Datei benötigt, um festzustellen, wo sich der Dateizeiger befindet FileTell und FileSeek, von wo aus gelesen oder geschrieben werden soll, um die Ablage von Daten auf der Festplatte zu erzwingen FileFlush und natürlich um die Datei zu schließen, damit andere Anwendungen sie bearbeiten können.


Ganz zufällig habe ich entdeckt, was Ihr Problem ist:

Während eines Experiments ist ein Ordner im Explorer oder einem anderen Dateimanager geöffnet, um die Erstellung und Löschung einer Datei zu überwachen. Und sobald die Datei gelöscht ist, bleibt der Ordner belegt und kann nicht mehr gelöscht werden. Das Ergebnis ist

2017.08.29 09:42:15.657 Demo_FolderDelete (CADJPY,H4)   Не удалось удалить папку nonempty. Код ошибки=5024

Aber die Tatsache, dass nach einem erfolglosen Versuch, einen Ordner zu löschen, dieser Ordner weiterhin belegt ist, ist leider eine Tatsache. Dies wird nun Gegenstand eines Antrags an den SD sein.

ps; Leider habe ich bei dem Experiment auch Mist gebaut. Nach dem Schreiben in die Datei, die Daten auf die Festplatte zurückgesetzt, versucht, es mit Notepad zu öffnen, sondern bekam als Antwort ...(Abbildung), um den Versuch zu öffnen vergessen und das ist, was hielt den Ordner und ließ es nicht gelöscht werden.

Zusammenfassung: Keine Probleme mit mql-Dateien.

 

Alexey Viktorov:

Völlig zufällig habe ich entdeckt, was Ihr Problem ist:

Während eines Experiments ist ein Ordner im Explorer oder einem anderen Dateimanager geöffnet, um die Erstellung und Löschung einer Datei zu überwachen. Und nach dem Löschen der Datei bleibt der Ordner besetzt und kann nicht gelöscht werden. Das Ergebnis ist

2017.08.29 09:42:15.657 Demo_FolderDelete (CADJPY,H4)   Не удалось удалить папку nonempty. Код ошибки=5024

Aber die Tatsache, dass nach einem erfolglosen Versuch, einen Ordner zu löschen, dieser Ordner weiterhin belegt ist, ist leider eine Tatsache. Dies wird nun an den SR gemeldet.

Ich habe dieses Verhalten auch schon unter ganz anderen Umständen erlebt, nämlich wenn ich einen Ordner zum Löschen offen halte, was dazu führt, dass Programme/Skripte/SVN usw. diesen Ordner nicht löschen können.

Und es wird immer auf die gleiche Weise behandelt - durch manuelles Löschen des Ordners. Es handelt sich also kaum um ein Terminal- oder Editorproblem.

 
Rashid Umarov:

Ich habe dieses Verhalten auch schon unter ganz anderen Umständen erlebt, nämlich wenn ich einen Ordner zum Löschen offen hielt, mit dem Ergebnis, dass Programme/Skripte/SVN usw. den Ordner nicht löschen konnten.

Und es wird immer auf die gleiche Weise behandelt - durch manuelles Löschen des betreffenden Ordners. Es handelt sich also kaum um ein Terminal- oder Editorproblem.

Ich habe meinen Beitrag ein wenig später ergänzt.

Forum zum Thema Handel, automatisierte Handelssysteme und Testen von Handelsstrategien

Nicht löschen eines Ordners, wenn er noch nicht geschlossene Dateien enthält

Alexey Viktorov, 2017.08.29 08:55


ps; Leider habe ich bei dem Experiment auch Mist gebaut. Nach dem Schreiben in die Datei habe ich die Daten auf die Festplatte zurückgesetzt und versucht, die Datei mit Notepad zu öffnen, bekam aber als Antwort ...(Abbildung), den Öffnungsversuch abzubrechen, was ich vergessen habe, und das ist es, was den Ordner behalten hat und ihn nicht löschen ließ.

Zusammenfassung: Keine Probleme mit mql-Dateien.


Seltsam, dass Sie meinen Beitrag ohne diesen Zusatz zitiert haben.

 
Alexey Viktorov:

Ich habe meinen Beitrag ein wenig später ergänzt.


Seltsam, dass Sie meinen Beitrag ohne diesen Zusatz zitiert haben.

Nur damit Sie auf die Antwort des SD vorbereitet sind.

 
Rashid Umarov:

Nur damit Sie auf die Antwort des SD vorbereitet sind.

Wenn ich also den Grund für das Problem verstanden habe, warum sollte ich dann Mist von der SD-Karte schreiben? Ich habe nur nicht laut gesagt, dass ich mich weigere, es zu schreiben... Ich dachte, das sei für jeden offensichtlich.
 
Rashid Umarov:

Ich habe dieses Verhalten schon unter ganz anderen Umständen erlebt - auch wenn ich einen Ordner zum Löschen offen halte, was dazu führt, dass Programme/Skripte/SVN usw. den Ordner nicht löschen können.

Und die Abhilfe ist immer dieselbe - den Ordner manuell zu löschen. Es handelt sich also kaum um ein Terminal- oder Editorproblem.

Und die Tatsache, dass ein Ordner in einem Dateimanager geöffnet wird, NICHT eine DATEI, hat keinen Einfluss auf seine Entfernung durch mql.

 
Alexey Viktorov:

1. Beim Öffnen einer Datei zum Lesen wird das Dateihandle abgefragt.

2. Um in eine andere Datei zu schreiben, benötigen wir ein weiteres Dateihandle, also ist es sinnvoll, es in einer anderen Variablen zu speichern. Nach dem Schreiben in eine neue Datei werden die Handles der beiden Dateien in zwei Variablen gespeichert, und beide Dateien werden anhand dieser Handles geschlossen.

3. Wenn die Datei zu einem unbekannten Zeitpunkt und von einer unbekannten Person erstellt wurde, besteht eine SEHR gute Chance, dass die Datei von keiner Anwendung belegt ist. Wenn Sie die Datei für einen bestimmten Zweck öffnen, haben Sie bereits ein FileOpen-Handle und sollten es schließen, bevor Sie den Ordner löschen.

4. Beim Kopieren einer Datei aus einem vorhandenen Programm in das mql ist das Dateihandle absolut unnötig.

5. Sobald eine Datei kopiert wurde, ist sie nicht mehr geöffnet und muss nicht mehr geschlossen werden.


1 Der Handle wird nur für die Funktion FileClose benötigt. Ich kann die Datei nicht öffnen. Sie wurde vor mir geschaffen. Ich kopiere sie nur und lösche sie. Ich kann sie nicht schließen, weil es keinen Griff gibt.

2. Zum Kopieren (FileCopy), zum Verschieben (FileMove), wird das Dateihandle nicht benötigt. Bitte beachten Sie die Dokumentation.

Wenn ich eine Datei öffne, die von jemandem zuvor mit der Funktion FileOpen erstellt wurde, erhalte ich ihr Handle nicht. Es ist noch gar nicht bekannt, welchen Griff ich bekommen werde. Es kann seine sein oder auch eine ganz andere. Ich habe versucht, das Handle einer anderen Datei zu bekommen, damit ich sie nach dem Kopiervorgang mit FileClose schließen kann. Es hat nicht geklappt.

4. Beim Kopieren wird der Griff nicht benötigt. Sie wird ohne Probleme kopiert. Die Datei wird jedoch automatisch zum Kopieren geöffnet. Außerdem kann ich die Datei nicht mit FileClose schließen, da es kein Handle gibt. Das ist wahrscheinlich der Grund, warum FolderClean nach dem Löschen von kopierten Dateien nicht funktioniert.

5. Woher wissen Sie, dass die Datei nach dem Kopieren nicht geöffnet ist? Sie wurde nicht explizit mit der Funktion FileOpen geöffnet, aber sie wurde mit kopiert, was bedeutet, dass sie geöffnet ist. Daher bleibt sie nach dem Kopieren und sogar nach dem Löschen offen. Wahrscheinlich.

Grund der Beschwerde: