Скачать MetaTrader 5

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

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Piotr Storozenko
19186
Piotr Storozenko  

Добрый день.

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

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

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

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


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;   
  } 
Piotr Storozenko
19186
Piotr Storozenko  
Заметил также что и руками не могу удалить оставшийся файл пока не зкарою терминалы.
Vadim Zhunko
5226
Vadim Zhunko  

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

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

Вот пример.

Piotr Storozenko
19186
Piotr Storozenko  
Zhunko:

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

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

Вот пример.


Спасибо
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий