FileFindFirst

 

Hallo,


sagt mal, die Funktion fürs File suchen kann nur in MQL5/Files Dateien finden? 

stimmt das so wies in der Doku steht?


https://www.mql5.com/de/docs/files/filefindfirst


danke 

amando

Dokumentation zu MQL5: Dateioperationen / FileFindFirst
Dokumentation zu MQL5: Dateioperationen / FileFindFirst
  • www.mql5.com
[in]  Suchfilter. Im Filter kann Unterverzeichnis (oder Folge der verschachtelten Unterverzeichnisse) gegenüber dem Verzeichnis angegeben werden \Files,in dem Dateien gesucht werden müssen. [out]  Der zurückgegebene Parameter, wohin im Falle des Erfolges der Name von gefundenen Datei oder Unterverzeichnis unterbracht wird. Only the file name is...
 
Ja
 
amando:

Hallo,


sagt mal, die Funktion fürs File suchen kann nur in MQL5/Files Dateien finden? 

stimmt das so wies in der Doku steht?

https://www.mql5.com/de/docs/files/filefindfirst

danke 

amando

Ja, das stimmt. Ist die wirklich b.......... Restriktion mit der 'Sandbox'. Das flag 'common' kannst du noch einstellen.

Willst du mehr, musst du auf winapi zurückgreifen. Dann kommt die Meldung wie 'gefählich' dlls doch sind.

Nachdem Menschen meist von sich auf andere schließen, nehme ich an, daß russische Programmierer böswillige Plattenformatierer sind.

Oder kann man da zu einem anderen Schluß kommen?

 

Man kann auch in Common einen Link anlegen, darüber kann man aus der Sandbox raus. Common ist dafür besser geeignet als das lokale Verzeichnis, weil die lokale Sandbox im Test woanders liegt und auch vorm Test gelöscht wird.

mklink /D C_Temp C:\Temp
 
lippmaje:

Man kann auch in Common einen Link anlegen, darüber kann man aus der Sandbox raus. Common ist dafür besser geeignet als das lokale Verzeichnis, weil die lokale Sandbox im Test woanders liegt und auch vorm Test gelöscht wird.

Kannst du mir das genauer erklären? Ich will eigentlich nur die templates auslesen 

 
amando:

Kannst du mir das genauer erklären? Ich will eigentlich nur die templates auslesen 

Das Problem hatte ich auch schon um ein Template auf alle offenen Charts anzuwenden. Ich hab das dann so gelöst:

//+------------------------------------------------------------------+
//|                                                       Ctrl_T.mq5 |
//|                                Copyright © 2017 Ing. Otto Pauser |
//|                       https://www.mql5.com/de/users/kronenchakra |
//+------------------------------------------------------------------+
#property copyright     "Copyright © 2017 Ing. Otto Pauser"
#property link          "https://www.mql5.com/de/users/kronenchakra"
#property version       "1.00"
#property description   "Aktuelles Template unter dem Namen 'LastApplied.tpl' speichern"
#property description   "und auf alle Charts (mit Ausnahme SILVER) anwenden."

string ProgName = MQLInfoString(MQL_PROGRAM_NAME);    // Name des Scripts (für MessageBox)
string TmplName = "LastApplied";                      // unter diesem Namen wird die aktuelle Einstellung gespeichert, wird immer kommentarlos überschrieben

void OnStart()
{
   long            initScale   = ChartGetInteger(ChartID(),CHART_SCALE);   // scale des aktuellen Charts merken
   long            initChartID = ChartID();                                // aktueller Chart
   long            currChartID = ChartFirst();                             // Schleifenvariable über alle Charts

   ObjectsDeleteAll(initChartID);                                          // delete all useless objects

   if(!ChartSaveTemplate(initChartID,TmplName))                            // hier wird die aktuelle Einstellung in Datei geschrieben
      {
         Alert("*ERROR* ChartSaveTemplate: "+TmplName,ProgName,MB_ICONERROR);
         return;                                                           // exit here
      }
      
   while(currChartID>=0)                                                   // Schleife über alle Charts
      {
         if(currChartID!=initChartID)                                      // nicht für Chart in dem das Script gestartet wurde
            if(ChartSymbol(currChartID)!="SILVER")                         // nicht für Chart "SILVER". Diese Zeile kann enfernt werden, ist nur für meine Anwendung
               if(!ChartApplyTemplate(currChartID, TmplName))              // Template anwenden
                  {
                     Alert("*ERROR* ChartApplyTemplate: "+TmplName,ProgName,MB_ICONERROR);
                     return;                                               // exit here
                  }
      currChartID=ChartNext(currChartID);
      }

   PlaySound("ok");
}

Dieses Script mit Hotkey Ctrl+T verbunden, und schon funktioniert es ähnlich wie im Web-MT5.

MQL5 FileFindFirst() kann nicht im Ordner Templates verwendet werden.

 
amando:

Kannst du mir das genauer erklären? Ich will eigentlich nur die templates auslesen 

Du legst einen Link im 'Files' Ordner im Common Verzeichnis an, indem Du eine Shell (Command) öffnest und dort den mklink Befehl eingibst, z.B.:

mklink /D Templates C:\...Pfad zum Installationsverzeichnis\MQL5\Profiles\Templates

Im Mql dann diesen Aufruf verwenden:

  string filename;
  FileFindFirst("Templates/*.tpl",filename,FILE_COMMON);
  Print("found: ",filename); // --> found: ADX.tpl
Das Common Verzeichnis geht am leichtesten mit dem Editor zu öffnen - im File Menü oder Ctrl-Shift-D.
 
amando :

Kannst du mir das genauer erklären? Ich will eigentlich nur die templates auslesen 

Wenn Sie von durch Code gespeicherten Vorlagen sprechen, können diese in MQL5 \ Files gespeichert und somit auch gelesen werden.
 
Alain Verleyen:
Wenn Sie von durch Code gespeicherten Vorlagen sprechen, können diese in MQL5 \ Files gespeichert und somit auch gelesen werden.

Ja, aber bei jedem neuspeichern muss ich den pfad neu auswählen. Das speichet mt5 nicht

 
amando :

Ja, aber bei jedem neuspeichern muss ich den pfad neu auswählen. Das speichet mt5 nicht

Ich verstehe es nicht, tut mir leid. Was versuchst du zu erreichen?
 
Alain Verleyen:
Ich verstehe es nicht, tut mir leid. Was versuchst du zu erreichen?

Ich will mir die templates zu meinen buttons hinzufügen 

sprich die letzte reihe mit den templates will ich einlesen, aktuell mache ich das über ein file, das hätte ich gerne direkt ausgelesen

Grund der Beschwerde: