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.

Имя начальной папки initial_dir ищется в папке клиентского терминала в подпапке MQL5\Files (или каталог_агента_тестирования\MQL5\Files в случае тестирования). Если среди флагов указан FSD_COMMON_FOLDER, то начальная папка ищется в общей папке всех клиентских терминалов \Terminal\Common\Files.

Параметр filter указывает допустимые файлы и должен быть задан в формате "<описание 1>|<расширение 1>|<описание 2>|<расширение 2>...". Например, "Text files (*.txt)|*.txt|All files (*.*)|*.*", при этом первое расширение "Text files (*.txt)|*.txt" будет выбрано как тип файла по умолчанию.

Если filter=NULL, то маской выбора файлов в диалоговом окне будет "All Files (*.*)|*.*|"

Если задан параметр default_filename, то во время невизуального тестирования вызов FileSelectDialog() вернёт 1, а само значение default_filename будет скопировано в массив filenames[].

Функция запрещена в пользовательских индикаторах, так как вызов FileSelectDialog() приостанавливает работу потока исполнения на всё время ожидания ответа пользователя. А так как все индикаторы по каждому символу выполняются в едином потоке, то такая остановка сделает невозможной работу всех графиков на всех таймфреймах по данному символу.

Пример:

//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//--- получим имена текстовых файлов для загрузки из общей папки клиентских терминалов
   string filenames[];
   if(FileSelectDialog("Выберите файлы для загрузки"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");
     }
//---
  }

Смотри также

FileOpen, FileIsExist, FileDelete, FileMove, FolderCreate, FolderDelete, FolderClean, Флаги открытия файлов