FileWriteStruct

Schreibt in die bin-Datei Inhalt der Struktur, die als Parameter von der laufenden Position des Dateianzeigers übertragen wurde.

uint  FileWriteStruct(
   int          file_handle,       // Datei-Handle
   const void&  struct_object,     // Referenz auf das Objekt 
   int          size=-1            // die aufzugezeichnete Größe in Bytes  
   );

Parameter

file_handle

[in] Dateidescriptor, der durch die Funktion FileOpen() zurückgegeben wird.

struct_object

[in] Referenz auf das Objekt der angegebenen Struktur. Die Struktur darf keine Strings, dynamischen Arrays, virtuellen Funktionen, Objekte von Klassen sowie keine Pointer auf Objekte und Funktionen beinhalten.

size=-1

[in]  Anzahl der Bytes, die geschrieben werden müssen. Wenn die Größe nicht angegeben wird oder die angegebene Anzahl der Bytes mehr als die Strukturgröße ist, wird die ganze Struktur vollstaendig geschrieben.

Rückgabewert

Im Erfolgsfall gibt die Funktion die Anzahl der geschriebenen Bytes zurück. Dateianzeiger wird um dieselbe Anzahl der Bytes verschoben.

Beispiel:

//+------------------------------------------------------------------+
//|                                          Demo_FileWiteStruct.mq5 |
//|                        Copyright 2013, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2013, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
//--- Beim Starten des Scripts zeigen Sie den Fenster mit den Eingabeparametern an
#property script_show_inputs
//--- die Parameter für das Erhalten der Daten aus dem Terminal
input string          InpSymbolName="EURUSD";           // Währungspaar
input ENUM_TIMEFRAMES InpSymbolPeriod=PERIOD_H1;        // Zeitspanne
input datetime        InpDateStart=D'2013.01.01 00:00'; // das Anfangsdatum zum Kopieren von Daten
//--- die Parameter für die Aufzeichnung der Daten in die Datei
input string          InpFileName="EURUSD.txt";         // der Dateiname
input string          InpDirectoryName="Data";          // der Verzeichnisname
//+------------------------------------------------------------------+
//| Struktur für die Speicherung von Daten-Kerzen                    |
//+------------------------------------------------------------------+
struct candlesticks
  {
   double            open;  // Eröffnungspreis
   double            close; // Schlußpreis
   double            high;  // der maximale Preis
   double            low;   // der minimale Preis
   datetime          date;  // Datum
  };
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
   datetime     date_finish=TimeCurrent();
   int          size;
   datetime     time_buff[];
   double       open_buff[];
   double       close_buff[];
   double       high_buff[];
   double       low_buff[];
   candlesticks cand_buff[];
//--- stürzen Sie den Fehlerwert
   ResetLastError();
//---erhalten Sie die Zeit des Erscheinens der Bars aus dem Umfang 
   if(CopyTime(InpSymbolName,InpSymbolPeriod,InpDateStart,date_finish,time_buff)==-1)
     {
      PrintFormat("Fehler beim Kopieren der Zeitwerte. Fehlercode = %d",GetLastError());
      return;
     }
//--- erhalten Sie die maximalen Preise der Bars aus dem Umfang 
   if(CopyHigh(InpSymbolName,InpSymbolPeriod,InpDateStart,date_finish,high_buff)==-1)
     {
      PrintFormat("Fehler beim Lopieren der maximalen Preise. Fehlercode = %d",GetLastError());
      return;
     }
//--- erhalten Sie die minimalen Preise der Bars aus dem Umfang
   if(CopyLow(InpSymbolName,InpSymbolPeriod,InpDateStart,date_finish,low_buff)==-1)
     {
      PrintFormat("Fehler beim Lopieren der minimalen Preise. Fehlercode = %d",GetLastError());
      return;
     }
//--- erhalten Sie die Eröffnungspreise der Bars aus dem Umfang
   if(CopyOpen(InpSymbolName,InpSymbolPeriod,InpDateStart,date_finish,open_buff)==-1)
     {
      PrintFormat("Fehler beim Kopieren von Werte des Eröffnungspreises. Fehlercode = %d",GetLastError());
      return;
     }
//--- erhalten Sie die Schlüßpreise der Bars aus dem Umfang
   if(CopyClose(InpSymbolName,InpSymbolPeriod,InpDateStart,date_finish,close_buff)==-1)
     {
      PrintFormat("Fehler beim Kopieren von Werte des Schlußpreises. Fehlercode = %d",GetLastError());
      return;
     }
//--- bestimmen Sie die Dimension des Arrays 
   size=ArraySize(time_buff);
//--- Speichern Sie alle Daten in der Arraystruktur
   ArrayResize(cand_buff,size);
   for(int i=0;i<size;i++)
     {
      cand_buff[i].open=open_buff[i];
      cand_buff[i].close=close_buff[i];
      cand_buff[i].high=high_buff[i];
      cand_buff[i].low=low_buff[i];
      cand_buff[i].date=time_buff[i];
     }
 
//--- öffnen Sie die Datei zum Schreiben des Arrays der Struktur in die Datei (wenn nicht, dann sie automatisch erstellt werden wird)
   ResetLastError();
   int file_handle=FileOpen(InpDirectoryName+"//"+InpFileName,FILE_READ|FILE_WRITE|FILE_BIN|FILE_COMMON);
   if(file_handle!=INVALID_HANDLE)
     {
      PrintFormat("%s Datei ist zum Lesen geöffnet",InpFileName);
      PrintFormat("Pfad zur Datei: %s\\Files\\",TerminalInfoString(TERMINAL_COMMONDATA_PATH));
      //--- bereiten Sie den Zähler der Zahl das Byte vor
      uint counter=0;
      //--- zeichnen Sie die Werte des Arrays im Zyklus 
      for(int i=0;i<size;i++)
         counter+=FileWriteStruct(file_handle,cand_buff[i]);
      PrintFormat("In die Datei %s ist es %d das Byte der Informationen aufgezeichnet",InpFileName,counter);
      PrintFormat("Die Gesamtanzahl der Bytes: %d * %d * %d = %d, %s",size,5,8,size*5*8,size*5*8==counter ? "Treu" : "Fehler");
      //--- schließen Sie die Datei
      FileClose(file_handle);
      PrintFormat("Die Daten sind aufgezeichnet, die Datei %s geschlossen",InpFileName);
     }
   else
      PrintFormat("Fehler beim Öffnen der Datei %s, Fehlercode = %d",InpFileName,GetLastError());
  }

Sehen Sie auch

Strukturen und Klassen