FileCopy

函数从本地或者共享文件中复制原始文件到另一文件中。

bool  FileCopy(
   const string  src_file_name,     // 源文件名称
   int           common_flag,       // 位置
   const string  dst_file_name,     // 目标文件名称
   int           mode_flags         // 访问模式
   );

参量

src_file_name

[in]  复制的文件名称。

common_flag

[in] 标记 决定文件位置,如果common_flag = FILE_COMMON,文件为所有客户端放置共享文件夹 \Terminal\Common\Files。否则,文件放置在本地文件夹中 (例如,common_flag=0)。

dst_file_name

[in]  结果文件名。

mode_flags

[in] 访问标记。 参量只包括2个标签:FILE_REWRITE 和/或 FILE_COMMON -忽略其他标签。如果文件已经存在,FILE_REWRITE标签未指定,文件就不能再编辑,函数返回错误值。

返回值

若失败函数返回false。

注释

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

如果新文件已经存在,复制文件在mode_flags 参量中取决于FILE_REWRITE标签的可用性。

示例:

//--- 启动脚本时显示输入参数的窗口
#property script_show_inputs
//--- 输入参数
input string InpSrc="source.txt";       // 源
input string InpDst="destination.txt";  // 复制
input int    InpEncodingType=FILE_ANSI// ANSI=32 或 UNICODE=64
//+------------------------------------------------------------------+
//| 脚本程序启动函数                                                   |
//+------------------------------------------------------------------+
void OnStart()
  {
//--- 显示源内容(它必须存在)
   if(!FileDisplay(InpSrc))
      return;
//--- 检查复制文件是否已经存在(可能没有创建)
   if(!FileDisplay(InpDst))
     {
      //--- 复制文件不存在,无FILE_REWRITE标识复制 (正确复制)
      if(FileCopy(InpSrc,0,InpDst,0))
         Print("File is copied!");
      else
         Print("File is not copied!");
     }
   else
     {
      //--- 复制文件已经存在,尝试无FILE_REWRITE标识复制(不正确复制)
      if(FileCopy(InpSrc,0,InpDst,0))
         Print("File is copied!");
      else
         Print("File is not copied!");
      //--- InpDst 文件的内容保持不变
      FileDisplay(InpDst);
      //--- 再次使用FILE_REWRITE标识复制(如果文件存在,正确复制)
      if(FileCopy(InpSrc,0,InpDst,FILE_REWRITE))
         Print("File is copied!");
      else
         Print("File is not copied!");
     }
//--- 接收InpSrc文件复制
   FileDisplay(InpDst);
  }
//+------------------------------------------------------------------+
//| 阅读文件内容                                                       |
//+------------------------------------------------------------------+
bool FileDisplay(const string file_name)
  {
//--- 重置错误值
   ResetLastError();
//--- 打开文件
   int file_handle=FileOpen(file_name,FILE_READ|FILE_TXT|InpEncodingType);
   if(file_handle!=INVALID_HANDLE)
     {
      //--- 在循环中显示文件内容
      Print("+---------------------+");
      PrintFormat("File name = %s",file_name);
      while(!FileIsEnding(file_handle))
         Print(FileReadString(file_handle));
      Print("+---------------------+");
      //--- 关闭文件
      FileClose(file_handle);
      return(true);
     }
//--- 打开文件失败
   PrintFormat("%s is not opened, error = %d",file_name,GetLastError());
   return(false);
  }