Баг с созданием скриншота в индикаторе МТ5 - страница 2

 
Vitaly Muzichenko #:

С флагами

имеет это


Уберите проверку FileSize, она возвращает "жесткий" размер, не учитывая дописанное в данной сессии.

 
Vitaly Muzichenko #:

Спасибо!

Сейчас имеем это:


У меня эту ошибку сыпало когда было  FILE_READ | FILE_WRITE
Заменил на  FILE_SHARE_READ | FILE_SHARE_WRITE перестала появляться.

Тут я не знаю, может у тебя наоборот с  FILE_READ | FILE_WRITE этой ошибки нет.

 
Roman #:

У меня эту ошибку сыпало когда было  FILE_READ | FILE_WRITE
Заменил на  FILE_SHARE_READ | FILE_SHARE_WRITE перестала появляться.

Тут я не знаю, может у тебя наоборот с  FILE_READ | FILE_WRITE этой ошибки нет.

Логика простая - FILE_WRITE лишний (и может мешать), FILE_READ - требуется (нужно оставить).

 
Stanislav Korotky #:

Уберите проверку FileSize, она возвращает "жесткий" размер, не учитывая дописанное в данной сессии.

Это крайний код, получаем Print() 

Начинается чтение скрина, которого ещё нет

void SendScreenTG()
{
  int h = FileOpen(filename, FILE_READ|FILE_WRITE|FILE_BIN|FILE_SHARE_READ|FILE_SHARE_WRITE|FILE_ANSI);
  if(h == INVALID_HANDLE) {
    Print("Err open "+filename);
    return;
  }

  uint size;
  uchar gif[];

//прочитали файл в массив
  if((size=FileReadArray(h,gif)) > 0) {
    //
    //тут вся логика функции SendScreenTG
    //
    Print("FileSize: ", size);
  } else {
    Print("FileSize: ", size);
  }

  FileClose(h);
}


--

P.S. Вообще не понятно, почему так долго создаётся скриншот в МТ5, какую цель преследовали.

 
Vitaly Muzichenko #:

Это крайний код, получаем Print() 

Начинается чтение скрина, которого ещё нет

--

P.S. Вообще не понятно, почему так долго создаётся скриншот в МТ5, какую цель преследовали.

Не-не, FILE_WRITE совершенно лишний. И FILE_ANSI тоже!

И еще раз - пишите _LastError после каждого вызова. Если лень - используйте макрос PRTF из алгокниги.

 
Stanislav Korotky #:

Не-не, FILE_WRITE совершенно лишний. И FILE_ANSI тоже!

И еще раз - пишите _LastError после каждого вызова. Если лень - используйте макрос PRTF из алгокниги.

Мне нужно в дальнейшем записать в этот файл и отправить в телегу, так что флаг нужен

 
Vitaly Muzichenko #:

Это крайний код, получаем Print() 

Начинается чтение скрина, которого ещё нет


--

P.S. Вообще не понятно, почему так долго создаётся скриншот в МТ5, какую цель преследовали.

У меня такие флаги

FileOpen(filename, FILE_SHARE_READ|FILE_SHARE_WRITE|FILE_BIN|FILE_ANSI);

Запустил сейчас на BTCUSD где быстро изменяются котировки, не одного 0 не проскакивает в

if((size=FileReadArray(h,gif)) > 0)
 
Roman #:

У меня такие флаги

Запустил сейчас на BTCUSD где быстро изменяются котировки, не одного 0 не проскакивает в

После создания скрина будет размер больше нуля. Далее удалите скрин с папки "Files" и вы снова получите 0

Вы читаете уже созданный файл ранее.

Вот что происходит после удаления файла

Функция возвращает Error, потому что файла ещё нет, через секунду файл только создаётся, но функция уже выполнилась.

--

--

Ставим все флаги

FileOpen(filename, FILE_READ|FILE_WRITE|FILE_SHARE_READ|FILE_SHARE_WRITE|FILE_BIN|FILE_ANSI);
и получаем 
 

Попробую описать подробней, что у меня происходит

Первый запуск инди: Получаю ошибку что файл нулевого размера, после этого создаётся скрин

Следующий сигнал отправляет файл созданный ранее, после этого его перезаписывает

Следующий сигнал снова отправляет прошлый файл и пишет новый.

По итогу, отсылаем прошлые файлы, а не текущий.

 
Vitaly Muzichenko #:

После создания скрина будет размер больше нуля. Далее удалите скрин с папки "Files" и вы снова получите 0

Вы читаете уже созданный файл ранее.

Вот что происходит после удаления файла

Функция возвращает Error, потому что файла ещё нет, через секунду файл только создаётся, но функция уже выполнилась.

--

--

Ставим все флаги

и получаем 

Да, если удалить файл скрина из папки Files, то на первом создании файла он тупит и даёт ошибку,
но последующие идут все без 0 размера.

scr


говорю попробуй такие флаги, у меня так

FileOpen(filename, FILE_SHARE_READ|FILE_SHARE_WRITE|FILE_BIN|FILE_ANSI);