FileLoad

指定二进制文件的所有数据读入数值类型或简单结构的传递数组。该函数允许您快速的将已知类型的数据读入相应的数组。

long  FileLoad(
   const string  file_name,         // 文件名
   void&         buffer[],          // 数值类型或简单结构的数组
   int           common_flag=0      // 在<data_folder>\MQL5\Files\ by default中搜索的文件标识
   );

参数

file_name

[in]  阅读数据的文件名称。

buffer

[out]  数值类型或 简单结构数组。

common_flag=0

[in]  指示操作模式的文件标识。如果没有指定参数,文件将在子文件夹MQL5\Files被搜索(或测试时在<testing_agent_directory>\MQL5\Files)。

返回值

读取的元素数量或错误时为 -1。

注意

FileLoad()从文件读取数组大小几倍的字节数。假设文件大小为10字节,函数将数据读入双精度类型数组(sizeof(double)=8)。在这种情况下,函数只能读入8个字节,在文件结尾剩下的2个字节将被删除,函数FileLoad()将返回1 (1个元素阅读)。

例如:

//+------------------------------------------------------------------+
//|                                                Demo_FileLoad.mq5 |
//|                        Copyright 2016, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2000-2024, MetaQuotes Ltd."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property copyright "Copyright 2000-2024, MetaQuotes Ltd."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property script_show_inputs
//--- 输入参数
input int      bars_to_save=10; // Number of bars
//+------------------------------------------------------------------+
//| 脚本程序起始函数                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
   string  filename=_Symbol+"_rates.bin";
   MqlRates rates[];
//---
   int copied=CopyRates(_Symbol,_Period,0,bars_to_save,rates);
   if(copied!=-1)
     {
      PrintFormat(" CopyRates(%s) copied %d bars",_Symbol,copied);
      //---  报价写入文件
      if(!FileSave(filename,rates,FILE_COMMON))
         PrintFormat("FileSave() failed, error=%d",GetLastError());
     }
   else
      PrintFormat("Failed CopyRates(%s), error=",_Symbol,GetLastError());
//--- 现在阅读这些返回到文件的报价
   ArrayFree(rates);
   long count=FileLoad(filename,rates,FILE_COMMON);
   if(count!=-1)
     {
      Print("Time\tOpen\tHigh\tLow\tClose\tTick Voulme\tSpread\tReal Volume");
      for(int i=0;i<count;i++)
        {
         PrintFormat("%s\t%G\t%G\t%G\t%G\t%I64u\t%d\t%I64u",
                     TimeToString(rates[i].time,TIME_DATE|TIME_SECONDS),
                     rates[i].open,rates[i].high,rates[i].low,rates[i].close,
                     rates[i].tick_volume,rates[i].spread,rates[i].real_volume);
        }
     }
  }

另见

Structures and ClassesFileReadArrayFileReadStruct, FileSave