FileWriteArray

函数可以编辑除字符串类型外任何类型的数组到BIN文件中(可以是不包含字符串或动态数组的结构数组)。

uint  FileWriteArray(
   int          file_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 开头的项目指导数组末尾)。

返回值

记录项目数量。

注释

字符串数组可以记录在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[];
//+------------------------------------------------------------------+
//| 专家初始化函数                                                     |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- 为数组分配内存
   ArrayResize(arr,size);
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| 专家去初始化函数                                                   |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//--- 如果计数,编写其余的计数字符串<n
   WriteData(count);
  }
//+------------------------------------------------------------------+
//| 专家订单号函数                                                     |
//+------------------------------------------------------------------+
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