85 lines
3.6 KiB
MQL5
85 lines
3.6 KiB
MQL5
//+------------------------------------------------------------------+
|
|
//| FileSelect.mq5 |
|
|
//| Copyright 2021, MetaQuotes Ltd. |
|
|
//| https://www.mql5.com |
|
|
//+------------------------------------------------------------------+
|
|
#include "..\..\Include\PRTF.mqh"
|
|
|
|
//+------------------------------------------------------------------+
|
|
//| Script program start function |
|
|
//+------------------------------------------------------------------+
|
|
void OnStart()
|
|
{
|
|
string filenames[]; // dynamic array: adaptive size
|
|
string fixed[1]; // too short array for many files
|
|
const string filter = // a couple of examples
|
|
"Text documents (*.txt)|*.txt"
|
|
"|Files with short names|????.*"
|
|
"|All files (*.*)|*.*";
|
|
|
|
// if nothing selected, script exists instantly
|
|
// otherwise it proceeds to the next steps
|
|
// (even on errors for demo purposes)
|
|
|
|
// open a single file for reading
|
|
Print("Open a file");
|
|
if(PRTF(FileSelectDialog(NULL, "MQL5book", filter,
|
|
0, filenames, NULL)) == 0) return;
|
|
ArrayPrint(filenames);
|
|
|
|
// open a single file for writing (possibly a new file)
|
|
Print("Save as a file");
|
|
if(PRTF(FileSelectDialog(NULL, "MQL5book", NULL,
|
|
FSD_WRITE_FILE, filenames, NULL)) == 0) return;
|
|
ArrayPrint(filenames);
|
|
|
|
// open multiple files for reading (dynamic array)
|
|
Print("Open multiple files (dynamic)");
|
|
if(PRTF(FileSelectDialog(NULL, "MQL5book", NULL,
|
|
FSD_FILE_MUST_EXIST | FSD_ALLOW_MULTISELECT, filenames, NULL)) == 0) return;
|
|
ArrayPrint(filenames);
|
|
|
|
// open multiple files for reading (fixed array)
|
|
Print("Open multiple files (fixed, choose more than 1 file for error)");
|
|
if(PRTF(FileSelectDialog(NULL, "MQL5book", NULL,
|
|
FSD_FILE_MUST_EXIST | FSD_ALLOW_MULTISELECT, fixed, NULL)) == 0) return;
|
|
ArrayPrint(fixed);
|
|
|
|
// select a folder
|
|
Print("Select a folder");
|
|
if(PRTF(FileSelectDialog(NULL, "MQL5book/nonexistent", NULL,
|
|
FSD_SELECT_FOLDER, filenames, NULL)) == 0) return;
|
|
ArrayPrint(filenames);
|
|
|
|
// incorrect flag combination can produce an error
|
|
Print("Select a folder");
|
|
if(PRTF(FileSelectDialog(NULL, "MQL5book", NULL,
|
|
FSD_SELECT_FOLDER | FSD_WRITE_FILE, filenames, NULL)) == 0) return;
|
|
// on error input/output array does not change
|
|
ArrayPrint(filenames);
|
|
}
|
|
//+------------------------------------------------------------------+
|
|
/*
|
|
Output (example)
|
|
|
|
Open a file
|
|
FileSelectDialog(NULL,MQL5book,filter,0,filenames,NULL)=1 / ok
|
|
"MQL5Book\utf8.txt"
|
|
Save as a file
|
|
FileSelectDialog(NULL,MQL5book,NULL,FSD_WRITE_FILE,filenames,NULL)=1 / ok
|
|
"MQL5Book\newfile"
|
|
Open multiple files (dynamic)
|
|
FileSelectDialog(NULL,MQL5book,NULL,FSD_FILE_MUST_EXIST|FSD_ALLOW_MULTISELECT,filenames,NULL)=5 / ok
|
|
"MQL5Book\ansi1252.txt" "MQL5Book\unicode1.txt" "MQL5Book\unicode2.txt" "MQL5Book\unicode3.txt" "MQL5Book\utf8.txt"
|
|
Open multiple files (fixed, choose more than 1 file for error)
|
|
FileSelectDialog(NULL,MQL5book,NULL,FSD_FILE_MUST_EXIST|FSD_ALLOW_MULTISELECT,fixed,NULL)=-1 / ARRAY_RESIZE_ERROR(4007)
|
|
null
|
|
Select a folder
|
|
FileSelectDialog(NULL,MQL5book/nonexistent,NULL,FSD_SELECT_FOLDER,filenames,NULL)=1 / ok
|
|
"MQL5Book"
|
|
Select a folder
|
|
FileSelectDialog(NULL,MQL5book,NULL,FSD_SELECT_FOLDER|FSD_WRITE_FILE,filenames,NULL)=-1 / INTERNAL_ERROR(4001)
|
|
"MQL5Book"
|
|
|
|
*/
|
|
//+------------------------------------------------------------------+
|