FileOpen

Funktion öffnet die Datei mit dem angegebenen Namen und angegebenen Flaggen.  

int  FileOpen(
   string  file_name,           // der Dateiname
   int     open_flags,          // die Kombination der Flaggen 
   short   delimiter='\t',      // der Begrenzer
   uint    codepage=CP_ACP      // die Kodeseite
   );

Parameter

file_name

[in]  Name der geöffneten Datei, kann Unterordner haben. Wenn die Datei für Schreiben geöffnet wird, werden die angegebenen Unterordner erzeugt werden, wenn sie es nicht gibt.

open_flags

[in] Kombination der Flaggen, die Arbeitsmode mit Datei bestimmt. Flaggen werden folgenderweise bestimmt:
FILE_READ Datei wird für Lesen geöffnet  
FILE_WRITE Datei wird für Schreiben geöffnet  
FILE_BIN Binärmode Lesen-Schreiben (ohne Umwandlung der Zeile in die Zeile)
FILE_CSV Date des Typs csv (alle geschriebenen Elemente werden in die Zeilen des entsprechenden Typs umgewandelt, unicode oder ansi, und durch Begrenzer getrennt)  
FILE_TXT einfache Textdatei (dieselbe csv, aber Begrenzer wird nicht berücksichtigt)  
FILE_ANSI Zeilen des Typs ANSI (Einbyte-Symbole)
FILE_UNICODE Zeilen des Typs UNICODE (Zweibyte-Symbole)
FILE_SHARE_READ Gesamter Lesezugang von mehreren Programmen  
FILE_SHARE_WRITE Gesamter Schreibezugang von mehreren Programmen  
FILE_COMMON Lage der Datei im Gesamtordner aller Client-Terminals \Terminal\Common\Files

delimiter='\t'

[in]  Wert, der als Begrenzer in txt oder csv-Datei verwendet wird.Wenn der Begrenzer für csv-Datei nicht angegeben wird, wird als Default-Wert Tab-Symbol verwendet. Wenn der Begrenzer für txt-Datei nicht angegeben wird, wird keiner Begrenzer verwendet. Wenn Begrenzer auf Null gestellt wird, wird keiner Begrenzer verwendet.

codepage=CP_ACP

[in] Wert der Kodeseite. Für die am meisten verwendeten Kodeseiten werden entsprechende Konstanten vorausgesehen.

Rückgabewert

Beim erfolgreichen Schließen gibt die Funktion der Datei Handle zurück, das danach für den Zugang zu Dateidaten verwendet wird). Beim Misserfolg gibt die Funktion INVALID_HANDLE zurück.

Hinweis

Aus Sicherheitsgründen ist die Arbeit mit Dateien in MQL5 streng gesteuert. Dateien, mit denen Datei-Operationen mittels MQL5 durchgeführt werden, können nicht außerhalb der Datei-Sandbox sein.

Wenn eine Datei in einer bestimmten Codierung gelesen werden muss (es wurde der Parameter codepage mit einem Wert der Codepage angegeben), muss das Flag FILE_ANSI gesetzt werden. Wenn das Flag FILE_ANSI nicht angegeben wurde, wird die Textdatei in Unicode ohne Konvertierung gelesen.

Datei wird im Ordner des Client-Terminals im Subordner MQL5\files geöffnet (oder Ordner_des_Testagents\MQL5\files beim Testen). Wenn unter Flaggen FILE_COMMON angegeben wird, wird die Datei im Gesamtordner aller Client-Terminals MetaTrader5 geöffnet.

Man kann "die genannten Kanäle" nach den einhaltenden Regeln öffnen:

  • Der Name des Kanals ist die Zeile, die aussehen soll: "\\servername\pipe\pipename", wo Servername ist der Name eines Servers im Netzwerk und Pipename ist der Name des Kanals. Wenn die Kanäle auf einem und derselbe Computer verwendet werden, kann der Name des Servers gesenkt sein, aber muss man anstelle seiner den Punkt machen: "\\.\pipe\pipename". Der Kunde, der versucht mit dem Kanal zu verbinden, soll seinen Namen wissen.
  • Man muss FileFlush() und FileSeek() auf den Anfang der Datei zwischen aufeinander folgenden Operationen von lesen und schreiben aufgerufen werden.

In den Zeilen verwenden Sie einen umgekehrten Schrägstrich '\', also wenn Sie das Programm in MQL5 schreiben, Sie Backslash müssen '\' deshalb das obige Beispiel Ihren Code als  "\\\\servername\\pipe\\pipename" schreiben.

Details zum Arbeiten mit die genannten Kanäle lesen Sie im Artikel "Communicating With MetaTrader 5 Using Named Pipes Without Using DLLs".

Beispiel:

//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//--- unkorrektes Verfahren der Dateiöffnung
   string terminal_data_path=TerminalInfoString(TERMINAL_DATA_PATH);
   string filename=terminal_data_path+"\\MQL5\\Files\\"+"fractals.csv";
   int filehandle=FileOpen(filename,FILE_WRITE|FILE_CSV);
   if(filehandle<0)
     {
      Print("erfolgloser Versuch, die Datei durch absoluten Pfad zu öffnen");
      Print("Fehlercode ",GetLastError());
     }
//--- korrektes Verahren der Arbeit in "Sandkasten"
   ResetLastError();
   filehandle=FileOpen("fractals.csv",FILE_WRITE|FILE_CSV);
   if(filehandle!=INVALID_HANDLE)
     {
      FileWrite(filehandle,TimeCurrent(),Symbol(), EnumToString(_Period));
      FileClose(filehandle);
      Print("FileOpen OK");
    }
   else Print("Operation FileOpen erfolglos, Fehler ",GetLastError());
//--- ein anderes Beispiel der Erzeugung des verschachtelten Verzeichnisses in MQL5\Files\
   string subfolder="Research";
   filehandle=FileOpen(subfolder+"\\fractals.txt",FILE_WRITE|FILE_CSV);
      if(filehandle!=INVALID_HANDLE)
     {
      FileWrite(filehandle,TimeCurrent(),Symbol(), EnumToString(_Period));
      FileClose(filehandle);
      Print("Datei muss im Ordner "+terminal_data_path+"\\"+subfolder+" erzeugt werden");
    }
   else Print("Fehler beim Öffnen der Datei, Fehler ",GetLastError());
  }

Sehen Sie auch

Kodeseite Verwenden, FileFindFirst, FolderCreate, Flaggen der Dateioeffnung