Проблема WindowScreenShot

 

Здравствуйте,

В индикаторе Costum WindowScreenShot работает идеально.

Создаю снимки через 5 минут, например: 10:15,10:20 и т.д....

И

После некоторого периода (случайного) времени не работает. Не записывается файл.

Почему?

GetLastError() не сигнализирует об ошибке.

Очевидно, все хорошо.


THX

 
ttechnik:

Здравствуйте,

В индикаторе 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));
  
RaptorUK:
Потому что ваш код, который мы не можем видеть, сломан. Поскольку мы не видим ваш код, мы не можем сказать вам, где он сломан.

ошибка=0

и lasterror =4103, не удается открыть файл.

Почему?

 
ttechnik:

ошибка=0

и lasterror =4103, не удается открыть файл.

почему?

Является ли имя файла уникальным или вы повторно используете имена файлов?
 
RaptorUK:
Является ли имя файла уникальным или вы повторно используете имена файлов?


уникальный
 
ttechnik:

уникальные
Как сделать их уникальными?
 
  1. НЕ вызывайте 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 ...
    }

  2.   int handle = FileOpen(filename, FILE_BIN|FILE_READ); 
      if (handle>-1)
        {
         error=GetLastError();
    
    Если FileOpen завершился неудачно, то handle == -1. Вы выдаете предупреждение, когда ошибки нет, и продолжаете, когда она есть.
 
RaptorUK:
Как сделать их уникальными?



string timestamp = TimeToStr(TimeCurrent(),TIME_SECONDS);
filename = filename + "_" + timestamp +  ".gif";
 
ttechnik:


Из того, что я вижу, вашей главной проблемой является обработка ошибок, как уже отметил WHRoeder, вы делаете плохую работу по сообщению об ошибках, когда/если они возникают. Например, вы даже не проверяете, работает или не работает WindowsScreenShot() ... сделайте изменения, которые предложил WHRoeder, и проверьте снова. Ваше имя файла не уникально . . вы используете hh:mm:ss от текущего времени, поэтому каждый день возможно перезаписывание файла предыдущего дня, если этот файл открыт в это время, это может привести к ошибке 4103.

Вместо этого ...

string timestamp = TimeToStr(TimeCurrent(), TIME_DATE|TIME_SECONDS);
filename = filename + "_" + timestamp +  ".gif";

... чтобы добавить дату в имя файла.

 
RaptorUK:

Из того, что я вижу, ваша самая большая проблема - это обработка ошибок, как уже отметил 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));
   }
 
ttechnik:

lasterror - 4103, продолжайте

ошибка 0

..... и я вышел из MT4 и запустил его снова, он работает правильно.

После некоторого периода(случайного) времени не работает. Не записывает файл. Но файл, имя файла уникальное.

почему?



Пожалуйста, покажите часть лог-файла, показывающую ошибки. ...
Причина обращения: