MQL5参考文件函数FileSelectDialog 

FileSelectDialog

创建一个文件或文件夹打开/创建对话框。

int  FileSelectDialog(
   string   caption,              // 窗口标题
   string   initial_dir,          // 初始目录
   string   filter,               // 扩展过滤器
   uint     flags,                // 标识组合
   string&  filenames[],          // 包含文件名的数组
   string   default_filename      //默认文件名
   );

参数

caption

[in]  对话框窗口标题。

initial_dir

[in]  相对于MQL5\Files的初始目录名,其内容将显示在对话框中。如果该值为NULL,对话框中显示MQL5\Files。

filter

[in]  将要显示在所选对话框窗口的文件的扩展过滤器。其他格式的文件被隐藏。

flags

[in] 定义对话框窗口模式的标识组合。标识定义如下:
FSD_WRITE_FILE – 打开文件对话框;
FSD_SELECT_FOLDER – 只允许选择文件夹;
FSD_ALLOW_MULTISELECT – 允许选择多个文件;
FSD_FILE_MUST_EXIST – 所选文件应该存在;
FSD_COMMON_FOLDER – 文件位于所以客户端的常规文件夹\Terminal\Common\Files。

filenames[]

[out]  所选文件/文件夹的名称所在的字符串数组。

default_filename

[in]  默认文件/文件夹名称。如果已指定,则在测试时自动将名称添加到打开的对话框中,并返回到filenames[]数组。

 

返回值

如果成功完成,该函数将返回文件名称可在filenames[]中获得的所选文件的数量。如果用户在不选择文件的情况下关闭对话框,则函数返回0。如果执行不成功,则返回值小于0。使用GetLastError()可以获得错误代码。

注意

出于安全考虑,在MQL5语言中严格管控文件的处理。通过MQL5语言在文件操作中使用的文件不能位于文件沙箱之外(即MQL5\Files目录外)。

在客户端的MQL5\Files(或在测试情况下的testing_agent_directory\MQL5\Files)目录中搜索initial_dir名称。如果在标识中设置了FSD_COMMON_FOLDER,则对初始目录的搜索在所有客户端的常规文件夹中执行\Terminal\Common\Files。

过滤器参数表示有效的文件,应该在"<description 1>|<extension 1>|<description 2>|<extension 2>..."格式中设置,例如, “文本文件(*.txt)|*.txt|所有文件 (*.*)|*.*”。选择的第一个扩展“文本文件(*.txt)|*.txt”作为默认文件类型。

如果过滤器=NULL,则对话框窗口中所选文件的掩码为“所有文件(*.*)|*.*|”

如果设置了default_filename参数,则调用FileSelectDialog()返回1,而在非可视化测试期间default_filename值本身会复制到filenames[]数组中。

该函数不可用于自定义指标,因为FileSelectDialog()调用在等待用户响应时,会一直暂停执行线程。由于每个交易品种的所有指标都在一个线程中执行,因此暂停会造成无法操作该交易品种的所有时间周期的所有图表。

例如:

//+------------------------------------------------------------------+
//| 脚本程序起始函数                                                   |
//+------------------------------------------------------------------+
void OnStart()
  {
//--- 从客户端的通用文件夹获取要下载的文本文件的名称
   string filenames[];
   if(FileSelectDialog("Select files to download"NULL
                       "Text files (*.txt)|*.txt|All files (*.*)|*.*"
                       FSD_ALLOW_MULTISELECT|FSD_COMMON_FOLDERfilenames"data.txt")>0)
     {
      //--- 显示每个选定文件的名称
      int total=ArraySize(filenames);
      for(int i=0i<totali++)
         Print(i": "filenames[i]);
     }
   else
     {
     Print("Files not selected");
     }
//---
  }

另见

FileOpenFileIsExistFileDeleteFileMoveFolderCreateFolderDeleteFolderClean文件开始标签