FileFindFirst

该函数根据指定过滤器启动搜索一个目录下的文件或子目录。

long  FileFindFirst(
   const string   file_filter,          // 字符串 - 搜寻过滤器
   string&        returned_filename,    // 找到的文件名或子目录名
   int            common_flag=0         // 定义搜索
   );

参量

file_filter

[in]  搜索过滤器。与\Files 目录相关联的子目录(或者嵌套在子目录里的序列),需要寻找文件的地方,指定在过滤器中

returned_filename

[out]  返回参数,这里,如果成功,则设置第一个找到的文件或子目录名称。仅返回文件名(包括扩展名),无论它们是否在搜索过滤器中指定,都不会包括目录和子目录。

common_flag

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

返回值

返回被搜索物件的句柄,它应该用于通过FileFindNext()函数进一步分类文件和子目录,返回搜索物件的句柄,它应该用于在没有关于过滤器的文件和子目录时(尤其是目录为空时),通过函数或INVALID_HANDLE进一步分类文件和子目录。搜索之后,句柄必须使用FileFindClose()函数来关闭。

注释

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

示例:

//--- 显示启动脚本时的导入参量的窗口
#property script_show_inputs
//--- filter
input string InpFilter="Dir1\\*";
//+------------------------------------------------------------------+
//| 脚本程序开始函数                                                   |
//+------------------------------------------------------------------+
void OnStart()
  {
   string file_name;
   string int_dir="";
   int    i=1,pos=0,last_pos=-1;
//--- search for the last backslash
   while(!IsStopped())
     {
      pos=StringFind(InpFilter,"\\",pos+1);
      if(pos>=0)
         last_pos=pos;
      else
         break;
     }
//--- 过滤器包含文件夹名称
   if(last_pos>=0)
      int_dir=StringSubstr(InpFilter,0,last_pos+1);
//--- get the search handle in the root of the local folder
   long search_handle=FileFindFirst(InpFilter,file_name);
//--- 检查 FileFindFirst() 是否成功执行
   if(search_handle!=INVALID_HANDLE)
     {
      //--- 检查循环中传递的字符串是否是文件或目录名称
      do
        {
         ResetLastError();
         //--- 如果这是一个文件,函数返回true,如果是目录,它返回错误 ERR_FILE_IS_DIRECTORY
         FileIsExist(int_dir+file_name);
         PrintFormat("%d : %s name = %s",i,GetLastError()==ERR_FILE_IS_DIRECTORY ? "Directory" : "File",file_name);
         i++;
        }
      while(FileFindNext(search_handle,file_name));
      //--- 关闭搜索句柄
      FileFindClose(search_handle);
     }
   else
      Print("Files not found!");
  }

另见

FileFindNextFileFindClose