FileOpen

函数打开文件的指定名称和标签。

int  FileOpen(
   string  file_name,           // 文件名
   int     open_flags,          // 标记的组合
   short   delimiter='\t',      // 定界符
   uint    codepage=CP_ACP      // 代码页
   );

参量

file_name

[in]  文件名称包括子文件夹,如果文件为编辑开放,就会建立子文件夹。

open_flags

[in] 标记的组合 决定文件夹的操作方式,标签如下定义
FILE_READ为阅读展开
FILE_WRITE 为编辑展开
FILE_BIN 二次编辑阅读模式(不会从字符串到字符串转换)
FILE_CSV csv类型文件(所有记录项目转换成统一码字符串或者ansi类型,被定界符分开)
FILE_TXT 简单文本文件(与csv相同,但不考虑定界符)
FILE_ANSI ANSI类型线(单一字节交易品种)
FILE_UNICODE UNICODE类型线(双精度函数字符)
FILE_SHARE_READ 从各自程序中共享阅读
FILE_SHARE_WRITE 从各自程序中共享编辑
FILE_COMMON 所有客户端的共享文件夹中的文件位置 \Terminal\Common\Files.

delimiter='\t'

[in]  在txt或者csv文件中使用分隔符的值,如果csv文件标识符不是指定的,默认到标签,如果txt文件标识符不是制定的,就不使用分隔符。如果分隔符清晰建立成0,不使用分隔符。

codepage=CP_ACP

[in]  代码页的值,最多使用 代码页 提供占用常量。

返回值

如果文件成功打开,函数返回文件处理,然后访问文件数据,失败后返回 INVALID_HANDLE

注释

出于安全考虑,工作文件必须严格由MQL5语言管理。使用MQL5实     施文件操作的文件意味着,不能在文件沙箱外。

如果文件应该以特定的编码方式(指定包含代码页值的codepage参数)读取,请确保设置FILE_ANSI标识。如果没有指定的FILE_ANSI标识,则文本文件将以Unicode形式读取,而无需进行任何转换。

文件在客户端子文件 MQL5\Files (或者testing_agent_directory\MQL5\Files)中打开,如果FILE_COMMON在制定标签中,文件在所有MT5客户端的共享文件中打开。

"命名管道"可以根据以下规则打开:

  • 管道名称是一个字符串,应该有以下显示:"\\servername\pipe\pipename", 这里servername - 网络中的服务器名称,而pipename是管道名称。如果管道用在同一个计算机上,服务器名称可以忽略,但有一个点应该被插入以替代它:"\\.\pipe\pipename"。尝试连接管道的客户应该知道其名称。
  • FileFlush()FileSeek() 在从管道读取和写入的顺序操作之间应该在文件开始被调用。

特殊符号'\'应该用于显示字符串。因此,'\' 应该在MQL5应用程序编写名称时,使用双杠。这意味着上面示例应该显示如下代码:"\\\\servername\\pipe\\pipename"。

使用命名管道的更多信息可以查看文章"通过MetaTrader 5沟通使用命名管道,而非DLLs "

示例:

//+------------------------------------------------------------------+
//| 启动函数的脚本程序                                                  |
//+------------------------------------------------------------------+
void OnStart()
  {
//--- 错误的打开文件方法
   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("Failed to open the file by the absolute path ");
      Print("Error code ",GetLastError());
     }
//--- “文件沙盒效应”中正确的工作方法
   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 failed, error ",GetLastError());
//---在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("The file must be created in the folder "+terminal_data_path+"\\"+subfolder);
     }
   else Print("File open failed, error ",GetLastError());
  }

另见

FileFindFirst创建文件夹打开文件标记