Доброго времени суток.
Мне необходимо, чтобы эксперт записывал данные типа float из массива в файл. При запуске, эксперт находит файл, успешно открывает его с флагами и записывает туда данные из массива, возвращая количество записанных элементов, но когда открываю файл, там пусто.
Пробовал так же FileWriteArray и FileWriteFloat, там получается точно так же.
Изменять файл можно, проверял.
Ваши ошибки:
- открываете файл с расширением ".txt" хотя FileWriteFloat пишет в ".bin"
- нет проверки на успешность открытия файла, соответственно результат не известен
- проверяете наличие файла в общей папке(FILE_COMMON), а открываете файл для записи в папке терминала (если файл открывается для записи то его наличие проверять необязательно)
- ArrayResize в Вашем примере лишняя
В общем загляните в справку, там по работе с файлами много примеров.
p.s. Вот ещё хорошая статья с примерами https://www.mql5.com/ru/articles/2720#z8

- www.mql5.com
Ваши ошибки:
- открываете файл с расширением ".txt" хотя FileWriteFloat пишет в ".bin"
- нет проверки на успешность открытия файла, соответственно результат не известен
- проверяете наличие файла в общей папке(FILE_COMMON), а открываете файл для записи в папке терминала (если файл открывается для записи то его наличие проверять необязательно)
- ArrayResize в Вашем примере лишняя
В общем загляните в справку, там по работе с файлами много примеров.
p.s. Вот ещё хорошая статья с примерами https://www.mql5.com/ru/articles/2720#z8
- Ошибочно написал FileWritaFloat, по факту использую FileWrite
- Проверка есть, просто не добавлял её сюда, чтобы не мусорить - Print("FileHandl2 = " + FileHandl2);
- Странно, ведь файл открывается судя по тому что Handl файла появляется. По дефолту при открытии файла для записи, в какую директорию смотрит эксперт?
- Так-же ошибочно его сюда добавил т.к. использовал динамический массив раньше и забыл убрать указание размера.
- Ошибочно написал FileWritaFloat, по факту использую FileWrite
- Проверка есть, просто не добавлял её сюда, чтобы не мусорить - Print("FileHandl2 = " + FileHandl2);
- Странно, ведь файл открывается судя по тому что Handl файла появляется. По дефолту при открытии файла для записи, в какую директорию смотрит эксперт?
- Так-же ошибочно его сюда добавил т.к. использовал динамический массив раньше и забыл убрать указание размера.
Вот Ваш немного изменённый код в виде скрипта, всё работает.
#property copyright "Copyright 2016, MetaQuotes Software Corp." #property link "https://www.mql5.com" #property version "1.00" #property strict string file_name = "NeiroDataBase.txt"; //+------------------------------------------------------------------+ //| Script program start function | //+------------------------------------------------------------------+ void OnStart() { float Massive[7] = {1.5, 2.0, 3.6, 4.0, 5.4, 6.0, 7.1}; ResetLastError(); int handle = FileOpen(file_name, FILE_WRITE); //---- if(handle != INVALID_HANDLE) { FileWrite(handle, Massive[0], Massive[1], Massive[2], Massive[3], Massive[4], Massive[5], Massive[6]); FileClose(handle); } else Print("Ошибка открытия файла, err = ", GetLastError()); }
А каким образом в FileOpen указать директорию к файлу?
FILE_COMMON
Указывать или не указывать
Указывать или не указывать
Точно, вот этого я и не заметил в документации . . .
Спасибо большое!

- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Доброго времени суток.
Мне необходимо, чтобы эксперт записывал данные типа float из массива в файл. При запуске, эксперт находит файл, успешно открывает его с флагами и записывает туда данные из массива, возвращая количество записанных элементов, но когда открываю файл, там пусто.
Пробовал так же FileWriteArray и FileWriteFloat, там получается точно так же.
Изменять файл можно, проверял.