Удаление файла при удалении объекта

 

Добрый вечер

 помогите пожалуйста  с этим кодом он почему то не работает

  if(id==CHART_EVENT_OBJECT_DELETE){
   if(StringFind(sparam,TrendLineName,0) != -1){
    if(!FileDelete(ObjectsFolderName+"\\"+Symbol()+"\\"+sparam+".txt",0))
     Print(__FUNCTION__+" - "+_GetLastError());
   }  
  }

задача такая: нужно чтобы при удалении объекта удалялся связанный с ним файл.


Не могу разобраться с CHART_EVENT_OBJECT_DELETE.

 
Скорее всего, дело в 
ObjectsFolderName

Что записано в этой переменной? Учитывается, что файловые операции возможны только в папке MQL\Files ? То есть должна существовать папка MQL\Files\<ObjectsFolderName>\<Symbol()>. 

 
Ihor Herasko #:
Скорее всего, дело в 

Что записано в этой переменной? Учитывается, что файловые операции возможны только в папке MQL\Files ? То есть должна существовать папка MQL\Files\<ObjectsFolderName>\<Symbol()>. 


if(!FileDelete(ObjectsFolderName+"\\"+Symbol()+"\\"+sparam+".txt",0))
спасибо за участие поверьте мне это проверенный путь к файлу он совершенно рабочий

  я не пойму   фразы из справочника  
                          если для графика установлено свойство CHART_EVENT_OBJECT_DELETE=true  
  его надо отдельно устанавливать? или достаточно этого
if(id==CHART_EVENT_OBJECT_DELETE)
Документация по MQL5: Константы, перечисления и структуры / Константы графиков / Свойства графиков
Документация по MQL5: Константы, перечисления и структуры / Константы графиков / Свойства графиков
  • www.mql5.com
Свойства графиков - Константы графиков - Константы, перечисления и структуры - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
На каком этапе выполнения кода происходит то, что непонятно Вам? Уточните, каким образом определяете, что имеет место проблема. Ну и саму проблему бы неплохо описать.
 
intersheff_mql5 #:

  я не пойму   фразы из справочника  
                          если для графика установлено свойство CHART_EVENT_OBJECT_DELETE=true  
  его надо отдельно устанавливать? или достаточно этого

Да, все дело в одном лишь символе - "_" )) Не доглядел. Ведь CHART_EVENT_OBJECT_DELETE - это свойство графика, а CHARTEVENT_OBJECT_DELETE - это идентификатор события.

Для того чтобы поймать событие  CHARTEVENT_OBJECT_DELETE в OnChartEvent(), нужно предварительно "подписаться" на это событие. Делается это при помощи функции ChartSetInteger():

ChartSetInteger(0, CHART_EVENT_OBJECT_DELETE, 1);

Хотя правильнее всего делать это так, как описано в документации: в момент загрузки программы запросить состояние этого свойства и запомнить, затем установить свое значение (включить), а при выгрузке программы восстановить значение для свойства графика.

Документация по MQL5: Константы, перечисления и структуры / Константы графиков / Примеры работы с графиком
Документация по MQL5: Константы, перечисления и структуры / Константы графиков / Примеры работы с графиком
  • www.mql5.com
Примеры работы с графиком - Константы графиков - Константы, перечисления и структуры - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 

Ihor Herasko #:


Да, все дело в одном лишь символе - "_" )) Не доглядел. Ведь CHART_EVENT_OBJECT_DELETE - это свойство графика, а CHARTEVENT_OBJECT_DELETE - это идентификатор события.

Для того чтобы поймать событие  CHARTEVENT_OBJECT_DELETE в OnChartEvent(), нужно предварительно "подписаться" на это событие. Делается это при помощи функции ChartSetInteger():

Хотя правильнее всего делать это так, как описано в документации: в момент загрузки программы запросить состояние этого свойства и запомнить, затем установить свое значение (включить), а при выгрузке программы восстановить значение для свойства графика.


огромное спасибо точно не доглядел на будущее буду знать хотя я решил проблему чуть  по своему через клавишу Backspace
получилось для моей системы даже более удобнее чем я задумывал

  if(id==CHARTEVENT_KEYDOWN){   
//---
    if(lparam == 8){
     for(int i=0; i<ObjectsTotal(); i++){      
string iName = ObjectName(i);
bool iSelect = ObjectGetInteger(0,iName,OBJPROP_SELECTED,0);
//---
      if(StringFind(iName,TrendLineName,0) != -1 && iSelect == 1){
       if(!FileDelete(ObjectsFolderName+"\\"+Symbol()+"\\"+iName+".txt",0))
       Print(__FILE__+" / "+ __FUNCTION__+" FileDelete / "+_GetLastError()); 
      }     
//---
     }            
    }                              
  }
Причина обращения: