Константы:
- Флаги открытия файлов
- Свойства файлов
- Позиционирование внутри файла
- Использование кодовой страницы
- MessageBox
Флаги открытия файлов
Значения флагов, определяющих режим работы с файлом. Флаги определены следующим образом:
Идентификатор |
Значение |
Описание |
FILE_READ |
1 |
Файл открывается для чтения. Флаг используется при открытии файлов (FileOpen()). При открытии файла обязательно должен быть указан флаг FILE_WRITE и/или флаг FILE_READ |
FILE_WRITE |
2 |
Файл открывается для записи. Флаг используется при открытии файлов (FileOpen()). При открытии файла обязательно должен быть указан флаг FILE_WRITE и/или флаг FILE_READ |
FILE_BIN |
4 |
Двоичный режим чтения-записи (без преобразования из строки и в строку). Флаг используется при открытии файлов (FileOpen()) |
FILE_CSV |
8 |
Файл типа csv (все записанные элементы преобразуются к строкам соответствующего типа, unicode или ansi, и разделяются разделителем). Флаг используется при открытии файлов (FileOpen()) |
FILE_TXT |
16 |
Простой текстовый файл (тот же csv, однако разделитель не принимается во внимание). Флаг используется при открытии файлов (FileOpen()) |
FILE_ANSI |
32 |
Строки типа ANSI (однобайтовые символы). Флаг используется при открытии файлов (FileOpen()) |
FILE_UNICODE |
64 |
Строки типа UNICODE (двухбайтовые символы). Флаг используется при открытии файлов (FileOpen()) |
FILE_SHARE_READ |
128 |
Совместный доступ по чтению со стороны нескольких программ. Флаг используется при открытии файлов (FileOpen()), но не заменяет при открытии файла необходимости указать FILE_WRITE и/или флаг FILE_READ |
FILE_SHARE_WRITE |
256 |
Совместный доступ по записи со стороны нескольких программ. Флаг используется при открытии файлов (FileOpen()), но не заменяет при открытии файла необходимости указать FILE_WRITE и/или флаг FILE_READ |
FILE_REWRITE |
512 |
Возможность перезаписывания файла функциями FileCopy() и FileMove(). Файл должен существовать или открываться для записи. В противном случае файл открыт не будет |
FILE_COMMON |
4096 |
Расположение файла в общей папке всех клиентских терминалов \Terminal\Common\Files. Флаг используется при открытии файлов (FileOpen()), копировании файлов (FileCopy(), FileMove()) и проверке существования файлов (FileIsExist()) |
При открытии файла можно указать один или более флагов, такое сочетание называется комбинацией флагов. Комбинация флагов записывается с помощью знака операции логического ИЛИ (|), который ставится между перечисляемыми флагами. Например, чтобы открыть файл в формате CSV одновременно на чтение и на запись, можно указать комбинацию FILE_READ|FILE_WRITE|FILE_CSV.
Пример:
int filehandle=FileOpen(filename,FILE_READ|FILE_WRITE|FILE_CSV);
Есть некоторые особенности работы при указании флагов чтения и записи:
- Если указан FILE_READ – делается попытка открытия уже существующего файла. Если файл не существует, то открыть файл не получится, новый файл не создается.
- Если FILE_READ|FILE_WRITE – создаётся новый файл если файл с таким именем отсутствует.
- Если FILE_WRITE – файл создается заново с нулевым размером.
При открытии файла обязательно должен быть указан флаг FILE_WRITE и/или флаг FILE_READ.
Флаги, определяющие тип чтения открытого файла, имеют приоритет. Самый старший флаг FILE_CSV, затем следует по старшинству флаг FILE_BIN, и наименьший приоритет имеет флаг FILE_TXT. Таким образом, если вдруг будут указаны сразу несколько флагов (FILE_TXT|FILE_CSV или FILE_TXT|FILE_BIN или FILE_BIN|FILE_CSV), то будет использован самый старший по приоритету флаг.
Флаги, определяющие тип кодировки, также имеют приоритет. Флаг FILE_UNICODE имеет более старший приоритет,чем флаг FILE_ANSI. Поэтому при указании комбинации FILE_UNICODE|FILE_ANSI будет использоваться флаг FILE_UNICODE.
Если не указано ни FILE_UNICODE, ни FILE_ANSI, то подразумевается FILE_UNICODE. Если не указано ни FILE_CSV, ни FILE_BIN, ни FILE_TXT, то подразумевается FILE_CSV.
Если файл открыт на чтение как текстовый (FILE_TXT или FILE_CSV), и при этом в начале файла будет обнаружен специальный двухбайтовый признак 0xff,0xfe, то флаг кодировки будет FILE_UNICODE, даже если указан флаг FILE_ANSI.
Свойства файлов
Для получения свойств файлов используется функция FileGetInteger(), которой при вызове передается идентификатор требуемого свойства из перечисления ENUM_FILE_PROPERTY_INTEGER
ENUM_FILE_PROPERTY_INTEGER
Идентификатор |
Описание идентификатора |
FILE_EXISTS |
Проверка на существование |
FILE_CREATE_DATE |
Дата создания |
FILE_MODIFY_DATE |
Дата последнего изменения |
FILE_ACCESS_DATE |
Дата последнего доступа к файлу |
FILE_SIZE |
Размер файла в байтах |
FILE_POSITION |
Позиция указателя в файле |
FILE_END |
Получение признака конца файла |
FILE_LINE_END |
Получение признака конца строки |
FILE_IS_COMMON |
Файл открыт в общей папке всех клиентских терминалов (смотри FILE_COMMON) |
FILE_IS_TEXT |
Файл открыт как текстовый (смотри FILE_TXT) |
FILE_IS_BINARY |
Файл открыт как бинарный (смотри FILE_BIN) |
FILE_IS_CSV |
Файл открыт как CSV (смотри FILE_CSV) |
FILE_IS_ANSI |
Файл открыт как ANSI (смотри FILE_ANSI) |
FILE_IS_READABLE |
Файл открыт с возможностью чтения (смотри FILE_READ) |
FILE_IS_WRITABLE |
Файл открыт с возможностью записи (смотри FILE_WRITE) |
Функция FileGetInteger() имеет два варианта вызова. В первом варианте для получения свойств файла указывается его хэндл, полученный при открытии файла функцией FileOpen(). Этот вариант позволяет получить все свойства файла.
Второй вариант функции FileGetInteger() возвращает значения свойств файла по его имени. В этом варианте можно получить только следующие общие свойства:
- FILE_EXISTS – существование указанного по имени файла;
- FILE_CREATE_DATE – дата создания файла с указанным именем;
- FILE_MODIFY_DATE – дата изменения файла с указанным именем;
- FILE_ACCESS_DATE – дата последнего доступа к файлу с указанным именем;
- FILE_SIZE – размер файла с указанным именем.
При попытке получения других свойств, кроме указанных выше, второй вариант вызова функции FileGetInteger() вернет ошибку.
Позиционирование внутри файла
Большая часть файловых функций связана с операциями чтения/записи информации. При этом с помощью функции FileSeek() можно указывать положение файлового указателя на позицию внутри файла, с которой будет производится следующая операция чтения или записи. Перечисление ENUM_FILE_POSITION содержит допустимые положения указателя, относительно которого можно указать смещения в байтах для следующей операции.
ENUM_FILE_POSITION
Идентификатор |
Описание |
SEEK_SET |
Начало файла |
SEEK_CUR |
Текущая позиция файлового указателя |
SEEK_END |
Конец файла |
Использование кодовой страницы в операциях преобразования строк
При операциях конвертации строковых переменных в массивы типа char и обратно в языке MQL5 используется кодировка, соответствующая по умолчанию текущей ANSI кодировке операционной системы Windows (CP_ACP). Если требуется указать иной тип кодировки, то его можно задать дополнительным параметром для функций CharArrayToString(), StringToCharArray() и FileOpen().
В таблице приведены встроенные константы для некоторых наиболее востребованных кодовых страниц. Неперечисленные кодовые страницы можно указать кодом, соответствующим этой странице.
Встроенные константы кодовых страниц
Константа |
Значение |
Описание |
CP_ACP |
0 |
Текущая кодовая страница ANSI кодировка в операционной системе Windows |
CP_OEMCP |
1 |
Текущая кодовая страница OEM. |
CP_MACCP |
2 |
Текущая кодовая страница Macintosh. Примечание: Это значение преимущественно используется в ранее созданных программных кодах и теперь в нем нет необходимости, так как современные компьютеры Macintosh используют Unicode кодировку. |
CP_THREAD_ACP |
3 |
Кодировка Windows ANSI для текущего потока выполнения. |
CP_SYMBOL |
42 |
Кодовая страница Symbol |
CP_UTF7 |
65000 |
Кодовая страница UTF-7. |
CP_UTF8 |
65001 |
Кодовая страница UTF-8. |
Константы диалогового окна MessageBox
Коды возврата функции MessageBox(). Если окно сообщения имеет кнопку Отмена (Cancel), то функция возвращает значение IDCANCEL при нажатой клавише ESC или кнопке Отмена (Cancel). Если окно сообщения не имеет кнопки Отмена (Cancel), нажатие ESC не дает никакого эффекта.
Константа |
Значение |
Описание |
IDOK |
1 |
Выбрана кнопка OK |
IDCANCEL |
2 |
Выбрана кнопка Отмена (Cancel) |
IDABORT |
3 |
Выбрана кнопка Прервать (Abort) |
IDRETRY |
4 |
Выбрана кнопка Повтор (Retry) |
IDIGNORE |
5 |
Выбрана кнопка Пропустить (Ignore) |
IDYES |
6 |
Выбрана кнопка Да (Yes) |
IDNO |
7 |
Выбрана кнопка Нет (No) |
IDTRYAGAIN |
10 |
Выбрана кнопка Повторить (Try Again) |
IDCONTINUE |
11 |
Выбрана кнопка Продолжить (Continue) |
Основные флаги функции MessageBox() определяют содержание и поведение диалогового окна. Это значение может быть комбинацией флагов из следующих групп флагов:
Константа |
Значение |
Описание |
MB_OK |
0x00000000 |
Окно сообщения содержит одну кнопку: OK. По умолчанию |
MB_OKCANCEL |
0x00000001 |
Окно сообщения содержит две кнопки: OK и Cancel |
MB_ABORTRETRYIGNORE |
0x00000002 |
Окно сообщения содержит три кнопки: Abort, Retry и Ignore |
MB_YESNOCANCEL |
0x00000003 |
Окно сообщения содержит три кнопки: Yes, No и Cancel |
MB_YESNO |
0x00000004 |
Окно сообщения содержит две кнопки: Yes и No |
MB_RETRYCANCEL |
0x00000005 |
Окно сообщения содержит две кнопки: Retry и Cancel |
MB_CANCELTRYCONTINUE |
0x00000006 |
Окно сообщения содержит три кнопки: Cancel, Try Again, Continue |
Для отображения иконки в окне сообщения необходимо определить дополнительные флаги:
Константа |
Значение |
Описание |
MB_ICONSTOP, MB_ICONERROR, MB_ICONHAND |
0x00000010 |
Изображение знака STOP |
MB_ICONQUESTION |
0x00000020 |
Изображение вопросительного знака |
MB_ICONEXCLAMATION, MB_ICONWARNING |
0x00000030 |
Изображение восклицательного знака |
MB_ICONINFORMATION, MB_ICONASTERISK |
0x00000040 |
Изображение, состоящее из строчного знака i в круге |
Кнопки по умолчанию задаются следующими флагами:
Константа |
Значение |
Описание |
MB_DEFBUTTON1 |
0x00000000 |
Первая кнопка MB_DEFBUTTON1 — кнопка выбрана по умолчанию, если MB_DEFBUTTON2, MB_DEFBUTTON3, или MB_DEFBUTTON4 не определены |
MB_DEFBUTTON2 |
0x00000100 |
Вторая кнопка — кнопка по умолчанию |
MB_DEFBUTTON3 |
0x00000200 |
Третья кнопка — кнопка по умолчанию |
MB_DEFBUTTON4 |
0x00000300 |
Четвертая кнопка — кнопка по умолчанию |