Fehlercode 5004 - Seite 3

 
RaptorUK:

Es war keine Datei angehängt...

Haben Sie sich vergewissert, dass die Datei, aus der Sie zu lesen versuchen, tatsächlich existiert? Schauen Sie bitte im richtigen Ordner nach und prüfen Sie ... noch etwas: Warum haben Sie eine Funktion namens filewriting(), um aus einer Datei zu LESEN?


Lieber RaptorUK,

Ja, ich kann bestätigen, dass sich die DAT-Datei im Ordner MQL4/files befindet. In der Tat habe ich informiert, dass ich eine Bedingung gesetzt habe, ob das Öffnen der Datei erfolgreich ist und es gelingt die meiste Zeit (90%) und 10% schlägt fehl und erzeugt einen 5004 Fehlercode.

Die Funktion filewriting() wird aufgerufen, wenn ein fileopen fehlschlägt. Dann würde die Funktion filewriting versuchen, eine Datei zu erstellen (zum Schreiben zu öffnen) und am Ende der Funktion die Datei zu schließen.

Ich habe die Datei aus der Print()-Anweisung aus dem Ordner MQL4\logs angehängt. Ich habe auf die Schaltfläche "Choose File" geklickt und konnte sehen, dass der Dateiname angezeigt wurde.

Mit freundlichen Grüßen,

Raisingfire

Dateien:
 
raisingfire:


Lieber RaptorUK,

Ja, ich kann bestätigen, dass sich die DAT-Datei im Ordner MQL4/files befindet. In der Tat habe ich informiert, dass ich eine Bedingung, ob die fileopen erfolgreich ist und es gelingt die meiste Zeit (90%) und 10% nicht zu öffnen und erzeugen einen 5004 Fehlercode.

Die Funktion filewriting() wird aufgerufen, wenn ein fileopen fehlschlägt. Dann würde die Funktion filewriting versuchen, eine Datei zu erstellen (zum Schreiben zu öffnen) und am Ende der Funktion die Datei zu schließen.

Ich habe die Datei aus der Print()-Anweisung aus dem Ordner MQL4\logs angehängt. Ich habe auf die Schaltfläche "Choose File" geklickt und konnte sehen, dass der Dateiname angezeigt wurde.

Mit freundlichen Grüßen,

Raisingfire

Woher kommen diese Dateien und wer schreibt sie?
 
RaptorUK:
Woher kommen diese Dateien? Wer schreibt sie?

Lieber RaptorUK,

Alle DAT-Dateien sind als temporäre Dateien gedacht, um die Anfangswerte bestimmter Indikatoren zu speichern, wenn wir eine Position öffnen. Wir haben sie erstellt und in unseren Programmen verwendet.

Wir verwenden eine Standardfunktion, um die Datei zum Schreiben zu öffnen:

fhandle=FileOpen(mf, FILE_BIN|FILE_WRITE);

Standard-Array zum Schreiben in die temporären Dateien (DAT) :

FileWriteArray(fhandle, mpara, 0, maxori); // wobei mpara das Array ist, Maxori ist die maximale Größe des Arrays

Standardfunktion zum Schließen einer Datei:

FileClose(fhandle);

Ich danke Ihnen für Ihre Hilfe.


Mit freundlichen Grüßen,

Raisingfire

 
raisingfire:

Lieber RaptorUK,

Alle DAT-Dateien sind als temporäre Dateien gedacht, um die Anfangswerte bestimmter Indikatoren jedes Mal zu speichern, wenn wir eine Position eröffnen. Wir haben sie erstellt und in unseren Programmen verwendet.

Wir verwenden eine Standardfunktion, um die Datei zum Schreiben zu öffnen:

fhandle=FileOpen(mf, FILE_BIN|FILE_WRITE);

Standard-Array zum Schreiben in die temporären Dateien (DAT) :

FileWriteArray(fhandle, mpara, 0, maxori); // wobei mpara das Array ist, Maxori ist die maximale Größe des Arrays

Standardfunktion zum Schließen von Dateien:

FileClose(fhandle);


OK, aber Sie haben meine Frage nicht wirklich beantwortet ... werden sie von demselben EA geschrieben, der sie zu lesen versucht, oder von einem anderen EA, Skript oder Indikator?
 
RaptorUK:

OK, aber Sie haben meine Frage nicht wirklich beantwortet ... werden sie von demselben EA geschrieben, der sie zu lesen versucht, oder von einem anderen EA, Skript oder Indikator?


Die Filewriting-Funktion befindet sich in allen EAs. Jedes Mal, wenn wir ein "FILEOPEN" ausgeben, folgt immer ein "FILECLOSE", nachdem wir eine bestimmte Aufgabe damit erledigt haben. Ich glaube also nicht, dass es ein Problem mit einer gesperrten Datei gibt, die versucht wird zu öffnen.

Vor langer Zeit hatten wir ein ähnliches Problem, bei dem versucht wurde, eine gesperrte Datei zu lesen. Und MT4 meldete dies automatisch in seiner Log-Datei. Nach 1 oder 2 Tagen wurden die Logs und History-Ordner riesig (Hunderte von Mbytes), voll mit diesen Berichten. Dann haben wir jedes Mal, wenn wir FILEOPEN gemacht haben, ein FILECLOSE gemacht. Das Problem war gelöst, und die Protokoll- und Verlaufsordner wurden nicht mehr so groß. Jetzt enthalten die Protokoll- und Verlaufsordner zusammen nur noch weniger als 100 KByte (trotz des Fehlercodes 5004, der immer wieder auftaucht).


Vielen Dank!

Raisingfire

 
raisingfire:

Die Filewriting-Funktion befindet sich in allen EAs im gleichen Zustand. Jedes Mal, wenn wir ein "FILEOPEN" ausgeben, folgt immer ein "FILECLOSE", nachdem wir bestimmte Aufgaben damit erledigt haben. Ich glaube also nicht, dass es ein Problem mit einer gesperrten Datei gibt, die versucht wird zu öffnen.

Vor langer Zeit hatten wir ein solches Problem, bei dem versucht wurde, eine gesperrte Datei zu lesen. Und MT4 meldete dies automatisch in seiner Protokolldatei. Also, nach 1 oder 2 Tagen, die Logs und Geschichte Ordner wurde riesig in Größe (Hunderte von Mbyte), voll von diesen Berichten. Dann haben wir jedes Mal, wenn wir FILEOPEN gemacht haben, ein FILECLOSE gemacht. Das Problem war gelöst, und die Protokoll- und Verlaufsordner wurden nicht mehr so groß. Jetzt enthalten die Protokoll- und Verlaufsordner zusammen nur noch weniger als 100 KByte (trotz des Fehlercodes 5004, der immer wieder auftaucht).

OK, danke für die Informationen. Mir gehen die Ideen aus ... Ich kann Ihnen nur vorschlagen, einen Test-EA zu erstellen, der das Problem reproduziert, den Sie hier posten und als Teil eines Service-Desk-Tickets an MetaQuotes senden können, und sie um eine Untersuchung zu bitten.
 
RaptorUK:
OK, danke für die Informationen. Mir gehen die Ideen aus... Ich kann nur vorschlagen, einen Test-EA zu erstellen, der das Problem reproduziert, den Sie hier posten und als Teil eines Service-Desk-Tickets an MetaQuotes senden können, um sie um eine Untersuchung zu bitten.


Lieber RaptorUK,


Trotzdem vielen Dank für Ihre Hilfe und Informationen. Ich werde versuchen, das zu tun, was Sie mir gesagt haben.

Nochmals vielen Dank.


Mit freundlichen Grüßen,

 
//+------------------------------------------------------------------+
//| expert count strategy open position function  (closedPos)          |
//+------------------------------------------------------------------+
void closedPos() {  

   int file=FileOpen("hist0935.csv",FILE_WRITE|FILE_CSV);
   
  
      
for(int i=OrdersHistoryTotal()-1; i>=0; i--) {

int file=FileOpen("hist0935.csv",FILE_READ|FILE_WRITE|FILE_CSV);

ResetLastError();
file=FileOpen("hist0935.csv",FILE_READ|FILE_WRITE|FILE_CSV);


      OrderSelect(i, SELECT_BY_POS, MODE_HISTORY); 

  if (file != INVALID_HANDLE){    

   PrintFormat("%s file is available for writing",file);
  
  
     
      FileWrite(file,OrderTicket(),OrderClosePrice(),OrderCloseTime());
      
      //--- close the file
     Print("error="+GetLastError());
      FileClose(file);
      PrintFormat("%s file is closed",file);
       
  }else{
      Alert("hist0935 Events File Error.",GetLastError());
   }
  
   }        
 // return();
}
 
raisingfire:

Lieber RaptorUK,


Vielen Dank für all Ihre Hilfe und Informationen. Ich werde versuchen, das zu tun, was Sie mir gesagt haben.

Nochmals vielen Dank.


Mit freundlichen Grüßen,



samoye:

gibt es bitte eine Lösung für den Fehler 5004? Ich erhalte die gleiche Fehlermeldung, wenn ich versuche, in eine Datei zu schreiben.

//+------------------------------------------------------------------+
//| expert count strategy open position function  (openPos)          |
//+------------------------------------------------------------------+
void closedPos() {  

   int file=FileOpen("hist0935.csv",FILE_WRITE|FILE_CSV);
   
  
      
for(int i=OrdersHistoryTotal()-1; i>=0; i--) {

int file=FileOpen("hist0935.csv",FILE_READ|FILE_WRITE|FILE_CSV);

ResetLastError();
file=FileOpen("hist0935.csv",FILE_READ|FILE_WRITE|FILE_CSV);


      OrderSelect(i, SELECT_BY_POS, MODE_HISTORY); 
//Print("OrderClosePrice()= " +OrderClosePrice()+"OrderCloseTime()= " + OrderCloseTime()+"OrderComment()= " + OrderComment()+ "OrderCommission()= " +OrderCommission()+ "OrderExpiration()= " +OrderExpiration()+ "OrderLots()= " +OrderLots()+ "OrderMagicNumber()= " +OrderMagicNumber()+ "OrderOpenPrice()= " +OrderOpenPrice()+ "OrderOpenTime()= " +OrderOpenTime()+ "OrderProfit()= " +OrderProfit()+ "OrderStopLoss()= " +OrderStopLoss()+ "OrderSwap()= " +OrderSwap()+ "OrderSymbol()= " +OrderSymbol()+ "OrderTakeProfit()= " +OrderTakeProfit()+ "OrderTicket()= " +OrderTicket()+ "OrderType()= " +OrderType() ); 
 

  if (file != INVALID_HANDLE){    

   PrintFormat("%s file is available for writing",file);
  
   
      //FileWrite(file,OrderClosePrice(),OrderCloseTime(), OrderComment(),OrderCommission(),OrderExpiration(),OrderLots(),OrderMagicNumber(),OrderOpenPrice(),OrderOpenTime(),OrderProfit(),OrderStopLoss(),OrderSwap(),OrderSymbol(),OrderTakeProfit(),OrderTicket(),OrderType());
     
      FileWrite(file,OrderTicket(),OrderClosePrice(),OrderCloseTime());
      
      //--- close the file
     Print("error="+GetLastError());
      FileClose(file);
      PrintFormat("%s file is closed",file);
       
  }else{
      Alert("hist0935 Events File Error.",GetLastError());
   }
  
   }        
 // return();
}

Ich benutze Build 765.

Für Ihre Hilfe bin ich Ihnen sehr dankbar.

 
   int file=FileOpen("hist0935.csv",FILE_WRITE|FILE_CSV);  
      
for(int i=OrdersHistoryTotal()-1; i>=0; i--) {

int file=FileOpen("hist0935.csv",FILE_READ|FILE_WRITE|FILE_CSV);
                                                                
ResetLastError();                                               
file=FileOpen("hist0935.csv",FILE_READ|FILE_WRITE|FILE_CSV);    

  1. Sie öffnen die Datei zum Schreiben, sie hat jetzt die Länge Null.
  2. Schleife beginnen
  3. Sie öffnen die Datei zum Lesen und Schreiben. Sie haben die Datei jetzt zweimal geöffnet und den ursprünglichen Handle verloren.
  4. ResetLastError ist unnötig, schauen Sie nur auf GetLastError, wenn Sie ein Problem haben
  5. Sie öffnen die Datei dreimal und haben zwei Handles verloren.
  6. In der nächsten Schleife öffnen Sie die Datei weitere Male.
Grund der Beschwerde: