FileOpen funktioniert nicht in MQL5... Wieso /Was tun ?

Einloggen oder registrieren, um einen Kommentar zu schreiben
Bayne
1010
Bayne  
string mainPredictionCSV_Name = "test.txt";//TerminalInfoString(TERMINAL_DATA_PATH)+"\\MQL5\\Files\\test.txt";

mainHandle = FileOpen(mainPredictionCSV_Name,FILE_READ|FILE_TXT);

if (mainHandle >0)
            {Print("Main-Predictions File successfully opened.");
                    
                    FileClose(mainHandle);
            }
else
{Print("File "+mainPredictionCSV_Name+" not found, the last error is ", GetLastError());}  

spottet ihr da einen Fehler ? File ist drinne im Files Ordner (zur sicherheit in jedem Files ordner pro Agent, wobei er immer im 3000er verschwindet)


Wie man sieht habe sicherheitshalber auch mit folgendem probiert:
TerminalInfoString(TERMINAL_DATA_PATH

Auch die Flags FILE_COMMON und FILE_SHARE_READ habe ich durch.

Wollte ursprünglich eine CSV einlesen, habe es jedoch nun auch mit einer TXT versucht.

Ich habe keine Ahnung mehr was ich machen kann und bitte um hilfe. Result ist immer error 5002.

Carl Schreiber
Moderator
9790
Carl Schreiber  

Fehler 5002 bedeutet? "Ungültiger Dateiname ".

Ich kann aber nicht erkennen, warum "test.txt" falsch sein soll - stimmt den die Nummer der Fehlerzeile?

Bayne
1010
Bayne  
Carl Schreiber:

Fehler 5002 bedeutet? "Ungültiger Dateiname ".

Ich kann aber nicht erkennen, warum "test.txt" falsch sein soll - stimmt den die Nummer der Fehlerzeile?


Sorry da lag ein FileOpen dazwischen meine natürlich 5004.

FileIsExist gibt false aus.

Carl Schreiber
Moderator
9790
Carl Schreiber  

Ich weiß jetzt  nicht, wo die Datei bei Dir gesucht wird.

Mach mal ein FileCreate und schau mal wo das liegt, dann leg dort die Test.txt hin

Bayne
1010
Bayne  
Carl Schreiber:

Ich weiß jetzt  nicht, wo die Datei bei Dir gesucht wird.

Mach mal ein FileCreate und schau mal wo das liegt, dann leg dort die Test.txt hin

Leider auch schon probiert. Liegt dann in Roaming\MetaQuotes\Terminal\67381DD86A2959850232C0BA725E5966\MQL5\Files

Habs auchnochmal mit FILE_CSV und einem test.csv file probiert -> same result.

gibt es nicht noch etwas was ich probieren kann?

Carl Schreiber
Moderator
9790
Carl Schreiber  
Bayne:

Leider auch schon probiert. Liegt dann in Roaming\MetaQuotes\Terminal\67381DD86A2959850232C0BA725E5966\MQL5\Files

Habs auchnochmal mit FILE_CSV und einem test.csv file probiert -> same result.

gibt es nicht noch etwas was ich probieren kann?

Kann  es doch ein einfacher Schreibfehler sein oder es liegt an der Zeichencodierung?

Mach 'mal ein CreateFile("test.txt"..) und öffnen das dann.

Bayne
1010
Bayne  
Carl Schreiber:

Kann  es doch ein einfacher Schreibfehler sein oder es liegt an der Zeichencodierung?

Mach 'mal ein CreateFile("test.txt"..) und öffnen das dann.

habs jetzt mal mit "abc.txt" statt test.txt gemacht, weil alles schon voll damit ist ^^

Lässt sich problemlos öffnen. Woran kann das liegen? (das CSV von davor wurde auch von MQL5 geschrieben, könnte aber evtl im zeichencode geändert worden sein-> welcher wird verlangt? Unicode?-> umgewandelt, klappt immernoch nicht)


Edit habe jetzt das abc.txt mal zu UTF8 geändert und ist immernoch problmlos lesbar, daran wirds nicht liegen.


Btw das CSV welches ich öffnen will hat etwa 60.000 Zeilen

Bayne
1010
Bayne  

Wichtige Beobachtung:

Sobald man die Zeichencodierung eines Files ändert, egal ob ANSI oder UTF8 ist das File nicht mehr lesbar für MQL, das gilt AUCH wenn man die Codierung wieder zurück auf Unicode setzt. was tun?

(kein Schreibschutz, vollzugriff ist aktiviert)


help please :(

wobei fileisexist natürlich immernoch false ist
Christian
3160
Christian  

Handbuch zum Fehlerfinden:


1. lauffähiges script erstellen. Dateiname so wählen das er definitiv nur einmal auf dem Rechner vorkommt.

//+------------------------------------------------------------------+
//|                                   Bayne_Forum_fileopen_write.mq5 |
//|                        Copyright 2019, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2019, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
   string mainPredictionCSV_Name = "man_nimmt_einen_namen_den_es_definitiv_nicht_gibt.txt";

   int  mainHandle = FileOpen(mainPredictionCSV_Name,FILE_READ|FILE_TXT);

   if(mainHandle >0)
     {
      Print("Main-Predictions File successfully opened.");

      FileClose(mainHandle);
     }
   else
     {
      Print("File "+mainPredictionCSV_Name+" not found, the last error is ", GetLastError());
     }
  }
//+------------------------------------------------------------------+

2. ProcessMonitor von SysinternalsSuite starten. https://docs.microsoft.com/en-us/sysinternals/downloads/procmon

    Alles exludieren bis auf terminal64.exe

3. script starten

4. Log im ProcMon ansehen

    Dann erscheint dort der Fehler warum die Datei nicht geöffnet werden kann

   Fehler Fileopen

    Auch der Pfad erscheint wo die terminal64.exe sucht

    *Instanz*/MQL5/Files/   !!!


5. file erstellen und dort ablegen.

6. name etwas abders aber uniqe wählen. "110011.txt"

7. script wiederholen

8. BINGO ...file opned


 



Codierung sollte keine Rolle spielen. Es kommt halt nur Salat raus wenns nicht passt.



Gruß

Process Monitor - Windows Sysinternals
Process Monitor - Windows Sysinternals
  • 2017.09.12
  • markruss
  • docs.microsoft.com
Monitor file system, Registry, process, thread and DLL activity in real-time.
Bayne
1010
Bayne  
Christian:

Handbuch zum Fehlerfinden:


1. lauffähiges script erstellen. Dateiname so wählen das er definitiv nur einmal auf dem Rechner vorkommt.

2. ProcessMonitor von SysinternalsSuite starten. https://docs.microsoft.com/en-us/sysinternals/downloads/procmon

    Alles exludieren bis auf terminal64.exe

3. script starten

4. Log im ProcMon ansehen

    Dann erscheint dort der Fehler warum die Datei nicht geöffnet werden kann

  

    Auch der Pfad erscheint wo die terminal64.exe sucht

    *Instanz*/MQL5/Files/   !!!


5. file erstellen und dort ablegen.

6. name etwas abders aber uniqe wählen. "110011.txt"

7. script wiederholen

8. BINGO ...file opned


 



Codierung sollte keine Rolle spielen. Es kommt halt nur Salat raus wenns nicht passt.



Gruß

Ersteinmal vielen dank für die Mühe, ich weiß deinen aufwand sehr zu schätzen Christian :)


im terminal direkt,(also nicht im tester -> wird es so angezeit wie oben-> works ... somehow)

thing is: (beim tester) es gibt keinen MQL5/Files Pfad unter den terminal64.exe einträgen, der den namen

man_nimmt_einen_namen_den_es_definitiv_nicht_gibt.txt

anzeigt :( habe sogar nochmal manuell nachgesucht (-> die Fehlermeldung erscheint also eher unter MQL5/Profiles/ {name des EAs})

Soweit sogut:

anschließend das csv umbenannt im obigen namen (nur halt beides mit .csv hinten dran versteht sich) und EA auf den chart angewand-> name not found (im terminal, also EA auf den chart direkt angewendet)

Bin nicht sicher ob es am CSV selbst liegt

Otto Pauser
2165
Otto Pauser  
Bayne: ......

Der Tester schreibt und liest die Dateien für jeden Agenten in einen separaten Ordner der oberhalb von MQL5 liegt, siehe Screenshot.


Lade dir den gratis 'Agent Ransack' aus dem Netz, der findet alles, und ist auch sauschnell

123
Einloggen oder registrieren, um einen Kommentar zu schreiben