Не удалось прочитать двоичный файл.
Код является:
Получил вывод:
Ожидаемый результат:
Прикрепленный бинарный файл.
Пожалуйста, помогите мне.
Скорее всего функция открытия не нашла файл, либо этот атрибут лишний FILE_COMMON. Пример из справки:
//--- откроем файл ResetLastError(); int file_handle=FileOpen(path,FILE_READ|FILE_BIN); if(file_handle!=INVALID_HANDLE) { //--- прочитаем все данные из файла в массив FileReadArray(file_handle,arr); //--- получим размер массива int size=ArraySize(arr); //--- распечатаем данные из массива for(int i=0;i<size;i++) Print("Date = ",arr[i].date," Bid = ",arr[i].bid," Ask = ",arr[i].ask); Print("Total data = ",size); //--- закрываем файл FileClose(file_handle); } else Print("File open failed, error ",GetLastError()); }
Создайте файл как это описано в справке, заполните его тестируемыми данными, а после уже попытайте прочитать:
//--- откроем файл ResetLastError(); int handle=FileOpen(path,FILE_READ|FILE_WRITE|FILE_BIN); if(handle!=INVALID_HANDLE) { //--- запишем данные массива в конец файла FileSeek(handle,0,SEEK_END); FileWriteArray(handle,arr,0,n); //--- закрываем файл FileClose(handle); } else Print("Failed to open the file, error ",GetLastError()); }
- Нет проверки успешности открытия файла (нужно проверить, что в переменной file, смотрите пример из справки).
- Для успешного открытия файлов, кроме FILE_READ и FILE_WRITE, нужно добавлять флаги FILE_SHARE_WRITE и FILE_SHARE_READ.
- Нет проверки успешности открытия файла (нужно проверить, что в переменной file, смотрите пример из справки).
- Для успешного открытия файлов, кроме FILE_READ и FILE_WRITE, нужно добавлять флаги FILE_SHARE_WRITE и FILE_SHARE_READ.
FILE_SHARE_WRITE и FILE_SHARE_READ эти атрибуты нужны для совместного доступа к файлу, на сколько я понимаю пока речи об этом у автора не было. :) это будет следующая тема в топика от автора.
На счет FILE_COMMON , это означает:
FILE_COMMON | 4096 | Расположение файла в общей папке всех клиентских терминалов \Terminal\Common\Files. Флаг используется при открытии файлов (FileOpen()), копировании файлов (FileCopy(), FileMove()) и проверке существования файлов (FileIsExist()) |
А следовательно, ваш файлик должен лежать в папке "Common\Files".
Мой файл находится в папке COMMON. Я приложил файл. Это байтовый файл. Я создаю с использованием Python. Тогда прочитайте это через MQL5.
with open ( "testme.bin" , "wb" ) as f: f.write (b "1" ) f.write (b "2" ) f.write (b "3" ) f.write (b "4" ) f.write (b "5" )
Таким образом создается файл BIN.
FILE_SHARE_WRITE и FILE_SHARE_READ эти атрибуты нужны для совместного доступа к файлу, на сколько я понимаю пока речи об этом у автора не было. :) это будет следующая тема в топика от автора.
У меня без этих флагов никогда ничего не читается и не пишется, что в MQL4, что в MQL5. Получаю ошибку.
Мой файл находится в папке COMMON. Я приложил файл. Это байтовый файл. Я создаю с использованием Python. Тогда прочитайте это через MQL5.
Таким образом создается файл BIN.
К сообщению прикрепил файл, в котором сохранен следующая информация формате FILE_BIN : 0,1,2,3,4,5
Откройте его в любом редакторе и откройте свой файл, что вы увидите? Если в вашем файле вы увидите текст типа 0,1,2,3,4,5, то конечно же он будет не корректно читаться функцией FileReadArray
У меня без этих флагов никогда ничего не читается и не пишется, что в MQL4, что в MQL5. Получаю ошибку.
Я не знаю, почему у вас так, вот пример у меня он отработал нормально без атрибутов FILE_SHARE_WRITE и FILE_SHARE_READ.
//+------------------------------------------------------------------+ //| Script program start function | //+------------------------------------------------------------------+ void OnStart() { //--- //--- откроем файл string path = "test_bin.bin"; int arr[5] = {0,1,2,3,4,5}; //int arr = 0; ResetLastError(); int handle=FileOpen(path,FILE_READ|FILE_WRITE|FILE_BIN); if(handle!=INVALID_HANDLE) { //--- запишем данные массива в конец файла FileSeek(handle,0,SEEK_END); FileWriteArray(handle,arr,0,ArraySize(arr)); //--- закрываем файл FileClose(handle); } else Print("Failed to open the file, error ",GetLastError()); } //+------------------------------------------------------------------+Быть может у вас отсутствовал атрибут FILE_READ
Мой файл находится в папке COMMON. Я приложил файл. Это байтовый файл. Я создаю с использованием Python. Тогда прочитайте это через MQL5.
Таким образом создается файл BIN.
Вполне возможно, f.write (b "1" ) никак не может быть равнозначен FileWriteArray(handle,arr,0,1)
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Не удалось прочитать двоичный файл.
Код является:
Получил вывод:
Ожидаемый результат:
Прикрепленный бинарный файл.
Пожалуйста, помогите мне.