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创建文件夹打开文件标记