forked from rosh/MQL5Book
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"
| |
| |
*/
| |
//+------------------------------------------------------------------+
|