Oщибка удаления файла.

 

Добрый день.

Подскажите пожалуйста как ликвидировать ошибку удаления файла.

Хочу организовать обмен данными между двумя терминалами на одном компьютере. Чтобы синхронизировать работу использую создание файла А в первом терминале, перезапись его в соответствующую папку другого терминала, удаление файла с папки первого терминала. Во втором терминале после прочтения файла А и удаления его советник исполняет цикл, содает файл Б перезаписывает его в соответствующую папку первого терминала и удаляет файл Б с папки второго терминала.

Советник на первом терминале прочитав файл Б и удалив его со своей папки исполняет цикл и создает файл А. Таким образом замыкается цикл обмена между двумя терминалами.

И все бы ничего только появляется проблема. После того как удляю советники с графиков и пробую поновно активировать появляется коммуникат о том что советник не может удалить файл. Если после этого закрою терминалы и запущу снова все начинает работать опять нормально. Ниже текст одной из программ.


extern string CopyFrom="c:\\Program Files\\HotForex MetaTrader";
string from ="\\experts\\files\\";
extern string CopyTo="c:\\Program Files\\Alpari Limited MT4";

//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+

string path5="CheckCommunicat.csv";
string path6="AskForContact.csv";

int init()
  {

    int hend=FileOpen(path6,FILE_CSV|FILE_READ);
     if(hend>0)
     {
       FileClose(hend);
       FileDelete(path6);
     }
   return(0);
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
datetime data;
int start()
  {
     string pa,buf,root;
     int hend=FileOpen(path6,FILE_CSV|FILE_READ);
     if(hend<0)return;
     else
     {
       FileClose(hend);
       FileDelete(path6);               
       int hend1=FileOpen(path5,FILE_CSV|FILE_WRITE);
       if(hend>0)
       {
         FileClose(hend1);       
         pa=CopyFrom+from+path5;
         buf=ReadFile(pa);
         root=CopyTo+from+path5;
         WriteFile(root,buf);
         FileDelete(path5); 
       }       
     }
   return(0);
  }
//+------------------------------------------------------------------+



#include <WinUser32.mqh>
#import "kernel32.dll"
   int _lopen  (string path, int of);
   int _lcreat (string path, int attrib);
   int _llseek (int handle, int offset, int origin);
   int _lread  (int handle, string buffer, int bytes);
   int _lwrite (int handle, string buffer, int bytes);
   int _lclose (int handle);
#import
string ReadFile (string path) 
  {
   string msg;
   string title="Reading";
   int result;
   int handle=_lopen(path,4);
   if (handle<0) {
      msg="Error wit open file";
      MessageBox(msg,title,MB_OK|MB_ICONERROR);
      return;
   }
   result=_llseek (handle,0,0);
   string buffer="";
   string char="x";
   int count=0;
   result=_lread (handle,char,1);
   while (result>0) 
   {
      buffer=buffer+char;
      char="x";
      count++;
      result=_lread (handle,char,1);
   }
   result=_lclose (handle);
   return(buffer);
  }
 
void WriteFile (string path, string buffer) 
  {
    int count=StringLen (buffer); 
    int result;
    int handle=_lopen (path,1);
    if(handle<0) 
      {
        handle=_lcreat (path,0);
        if(handle<0) 
          {
            Print ("Error create file ",path);
            return;
          }
        result=_lclose (handle);
      }
    handle=_lopen (path,1);               
    if(handle<0) 
      {
        Print("Error open file ",path); 
        return;
      }
    result=_llseek (handle,0,0);          
    result=_lwrite (handle,buffer,count); 
    if(result<0)  
        Print("Error writing into file ",path);
    result=_lclose (handle);              
    if(result<0)  
        Print("Error close file ",path);
    return;   
  } 
 
Заметил также что и руками не могу удалить оставшийся файл пока не зкарою терминалы.
 

Наверняка, файлы не закрыты. Из-за этого не удаляются.

Пора бы уж перейти на рекомендуемые файловые функции. Эти устарели ещё 5 лет назад.

Вот пример.

 
Zhunko:

Наверняка, файлы не закрыты. Из-за этого не удаляются.

Пора бы уж перейти на рекомендуемые файловые функции. Эти устарели ещё 5 лет назад.

Вот пример.


Спасибо
Причина обращения: