Константы ввода/вывода

Константы:

  • Флаги открытия файлов
  • Свойства файлов
  • Позиционирование внутри файла
  • Использование кодовой страницы
  • 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

Четвертая кнопка — кнопка по умолчанию