Русский

Справочник MQL4 Файловые операции FileWriteArray

Справка MQL4 одним файлом:

FileWriteArray

Записывает в файл типа BIN массивы любых типов, кроме строковых (может быть массив структур, не содержащих строки и динамические массивы).

uint  FileWriteArray(
   int          file_handle,         // handle файла
   const void&  array[],             // массив
   int          start=0,             // начальный индекс в массиве
   int          count=WHOLE_ARRAY    // количество элементов
   );

Параметры

file_handle

[in]  Файловый описатель, возвращаемый функцией FileOpen().

array[]

[out]  Массив для записи.

start=0

[in]  Начальный индекс в массиве (номер первого записываемого элемента).

count=WHOLE_ARRAY

[in]  Количество записываемых элементов (WHOLE_ARRAY означает, что записываются все элементы начиная с номера start до конца массива).

Возвращаемое значение

Количество записанных элементов или 0 в случае ошибки. Чтобы получить информацию об ошибке, необходимо вызвать функцию GetLastError().

Примечание

Строковый массив может записываться только в файл типа TXT. В этом случае строки автоматически завершаются символами конца строки "\r\n". В зависимости от типа файла ANSI или UNICODE, строки преобразовываются к ansi-кодировке, или нет.

Пример:

//+------------------------------------------------------------------+
//|                                          Demo_FileWriteArray.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"
//--- входные параметры
input string InpFileName="data.bin";
input string InpDirectoryName="SomeFolder";
//+------------------------------------------------------------------+
//| Структура для хранения данных о ценах                            |
//+------------------------------------------------------------------+
struct prices
  {
   datetime          date; // дата
   double            bid;  // цена бид
   double            ask;  // цена аск
  };
//--- глобальные переменные
int    count=0;
int    size=20;
string path=InpDirectoryName+"//"+InpFileName;
prices arr[];
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- выделение памяти для массива
   ArrayResize(arr,size);
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//--- запись оставшихся count строк, если count<n
   WriteData(count);
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//--- сохраним данные в массив
   arr[count].date=TimeCurrent();
   arr[count].bid=SymbolInfoDouble(Symbol(),SYMBOL_BID);
   arr[count].ask=SymbolInfoDouble(Symbol(),SYMBOL_ASK);
//--- отобразим текущие данные
   Print("Date = ",arr[count].date," Bid = ",arr[count].bid," Ask = ",arr[count].ask);
//--- увеличим счетчик
   count++;
//--- если массив заполнился, то записываем данные в файл и обнуляем его
   if(count==size)
     {
      WriteData(size);
      count=0;
     }
  }
//+------------------------------------------------------------------+
//| Запись n элементов массива в файл                                |
//+------------------------------------------------------------------+
void WriteData(const int n)
  {
//--- откроем файл
   ResetLastError();
   int handle=FileOpen(path,FILE_READ|FILE_WRITE|FILE_BIN);
   if(handle!=INVALID_HANDLE)
     {
      //--- запишем данные массива в конец файла
      FileSeek(handle,0,SEEK_END);
      FileWriteArray(handle,arr,0,n);
      //--- закрываем файл
      FileClose(handle);
     }
   else
      Print("Failed to open the file, error ",GetLastError());
  }

Смотри также

Переменные, FileSeek()