Здравствуйте,
В индикаторе Costum WindowScreenShot работает идеально.
Создаю снимки через 5 минут, например: 10:15,10:20 и т.д....
И
После некоторого периода (случайного) времени не работает. Не записывается файл.
Почему?
.... WindowScreenShot(filename, X_pixels, Y_pixels); int error=GetLastError(); if (error!=0) Alert(TimeToStr(TimeCurrent(),TIME_SECONDS)," trade_mode:", trade_mode, " T_ScreenShot FileWrite0 error: (",Symbol()," ",error,"): ",ErrorDescription(error)); int handle = FileOpen(filename, FILE_BIN|FILE_READ); if (handle>-1) { error=GetLastError(); if (error!=0) Alert(TimeToStr(TimeCurrent(),TIME_SECONDS)," trade_mode:", trade_mode, " T_ScreenShot FileWrite1 error: (",Symbol()," ",error,"): ",ErrorDescription(error)); FileClose(handle); } int lasterror=GetLastError(); if (lasterror!=0) Alert(TimeToStr(TimeCurrent(),TIME_SECONDS)," trade_mode:", trade_mode," T_ScreenShot, Schoted file open error: (",Symbol()," ",lasterror,"): ",ErrorDescription(lasterror));
Потому что ваш код, который мы не можем видеть, сломан. Поскольку мы не видим ваш код, мы не можем сказать вам, где он сломан.
ошибка=0
и lasterror =4103, не удается открыть файл.
Почему?
ошибка=0
и lasterror =4103, не удается открыть файл.
почему?
Является ли имя файла уникальным или вы повторно используете имена файлов?
уникальный
уникальные
НЕ вызывайте GetLastError(), если нет ошибки. WindowScreenShot(filename, X_pixels, Y_pixels); int error=GetLastError(); if (error!=0) Alert(TimeToStr(TimeCurrent(),TIME_SECONDS
Что такое возвращаемые значения функции? Как их использовать? - Форум MQL4 if( !WindowScreenShot(filename, X_pixels, Y_pixels) ){ int error=GetLastError(); Alert(TimeToStr(TimeCurrent(),TIME_SECONDS ... }
int handle = FileOpen(filename, FILE_BIN|FILE_READ); if (handle>-1) { error=GetLastError();
Если FileOpen завершился неудачно, то handle == -1. Вы выдаете предупреждение, когда ошибки нет, и продолжаете, когда она есть.
Как сделать их уникальными?
string timestamp = TimeToStr(TimeCurrent(),TIME_SECONDS); filename = filename + "_" + timestamp + ".gif";
Из того, что я вижу, вашей главной проблемой является обработка ошибок, как уже отметил WHRoeder, вы делаете плохую работу по сообщению об ошибках, когда/если они возникают. Например, вы даже не проверяете, работает или не работает WindowsScreenShot() ... сделайте изменения, которые предложил WHRoeder, и проверьте снова. Ваше имя файла не уникально . . вы используете hh:mm:ss от текущего времени, поэтому каждый день возможно перезаписывание файла предыдущего дня, если этот файл открыт в это время, это может привести к ошибке 4103.
Вместо этого ...
string timestamp = TimeToStr(TimeCurrent(), TIME_DATE|TIME_SECONDS); filename = filename + "_" + timestamp + ".gif";
... чтобы добавить дату в имя файла.
Из того, что я вижу, ваша самая большая проблема - это обработка ошибок, как уже отметил WHRoeder, вы делаете плохую работу по сообщению об ошибках, когда/если они возникают. Например, вы даже не проверяете, работает или не работает WindowsScreenShot() ... сделайте изменения, которые предложил WHRoeder, и проверьте снова. Ваше имя файла не уникально . . вы используете hh:mm:ss от текущего времени, поэтому каждый день возможно перезаписывание файла предыдущего дня, если этот файл открыт в это время, это может привести к ошибке 4103.
Вместо этого ...
... чтобы добавить дату в имя файла.
lasterror - 4103, продолжить
ошибка 0
..... и я вышел из MT4 и запустил его снова, все работает правильно.
После периода(произвольного) времени не работает. Не записывает файл. Но файл, имя файла уникальное.
почему?
string timestamp = TimeToStr(TimeCurrent(),TIME_DATE )+"_"+TimeToStr(TimeCurrent(),TIME_SECONDS); for (int i= StringLen(timestamp); i>0; i--) if (StringFind(timestamp,":",i)!=-1 || StringFind(timestamp,".",i)!=-1) timestamp= StringSetChar(timestamp, i, '-'); string filename = mappa + CharToStr(92) + CharToStr(92) + Symbol(); filename = filename + "_" + timestamp + ".gif"; int error; if(!WindowScreenShot(filename, X_pixels, Y_pixels)) { error=GetLastError(); if (error!=0) Alert(TimeToStr(TimeCurrent(),TIME_SECONDS)," trade_mode:", trade_mode, " T_ScreenShot FileWrite0 error: (",Symbol()," ",error,"): ",ErrorDescription(error)); } Alert(filename); int handle = FileOpen(filename, FILE_BIN|FILE_READ); if (handle>-1) { error=GetLastError(); if (error!=0) Alert(TimeToStr(TimeCurrent(),TIME_SECONDS)," trade_mode:", trade_mode, " T_ScreenShot FileWrite1 error: (",Symbol()," ",error,"): ",ErrorDescription(error)); FileClose(handle); } else { int lasterror=GetLastError(); if (lasterror!=0) Alert(TimeToStr(TimeCurrent(),TIME_SECONDS)," trade_mode:", trade_mode," T_ScreenShot, Schoted file open error: (",Symbol()," ",lasterror,"): ",ErrorDescription(lasterror)); }
lasterror - 4103, продолжайте
ошибка 0
..... и я вышел из MT4 и запустил его снова, он работает правильно.
После некоторого периода(случайного) времени не работает. Не записывает файл. Но файл, имя файла уникальное.
почему?
Пожалуйста, покажите часть лог-файла, показывающую ошибки. ...
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Здравствуйте,
В индикаторе Costum WindowScreenShot работает идеально.
Создаю снимки через 5 минут, например: 10:15,10:20 и т.д....
И
После некоторого периода (случайного) времени не работает. Не записывается файл.
Почему?
GetLastError() не сигнализирует об ошибке.
Очевидно, все хорошо.
THX