Named Pipe Работа с пайпами

 

Всем привет,

если данный вопрос обсуждался ткните ссылкой

не могу разобраться с Пайпами. как их создавать? в советнике хочу создать канал для обмена данными

в коде пишу:

void WriteFile (string path, string buffer) 
  {
  path="\\\\.\\pipe\\"+path;
    int count=StringLen (buffer); 
    int result;
    int handle=FileOpen (path,FILE_READ|FILE_WRITE|FILE_CSV);
    if(handle<0) 
      {
        handle=FileOpen (path,FILE_READ|FILE_WRITE|FILE_CSV);
        if(handle<0) 
          {
            Print ("Ошибка создания файла ",path+" "+handle);
            return;
          }
        FileClose (handle);
     }
    handle=FileOpen (path,FILE_READ|FILE_WRITE|FILE_CSV);               
    if(handle<0) 
      {
        Print("Ошибка открытия файла ",path); 
        return;
      }
    result=FileSeek (handle,0,0);          
    if(result<0) 
      {
        Print("Ошибка установки указателя"); 
        return;
      }
    result=FileWrite (handle,buffer); 
    if(result<0)  
    Print(result+" Ошибка записи в файл ",path," ",count," байт");
    FileClose (handle);              
    
  }

на что получаю ответ:

2014.03.21 11:03:55.408 EURCAD_OP,M1: Ошибка создания файла \\.\pipe\CopyLotSignal -1

 

что-то вообще не могу создать файл. любой.

 
Vladon:

что-то вообще не могу создать файл. любой.

Пример кода приведите.

Какая ошибка выдаётся при открытии?

 
Vladon:

Всем привет,

если данный вопрос обсуждался ткните ссылкой

не могу разобраться с Пайпами. как их создавать? в советнике хочу создать канал для обмена данными

в коде пишу:

на что получаю ответ:

2014.03.21 11:03:55.408 EURCAD_OP,M1: Ошибка создания файла \\.\pipe\CopyLotSignal -1


Вы видели наши примеры MQL4\Scripts\PipeExample?

Файл на клиенте не будет открыт до тех пор, пока сервер не откроет пайп

 
stringo:

Вы видели наши примеры MQL4\Scripts\PipeExample?

Файл на клиенте не будет открыт до тех пор, пока сервер не откроет пайп


Простите я только начал читать про эту тему, я так понял без сервера exe нельзя в советнике открыть канал?

я просто думал что могу без сервера, вернее без ехе - связать двух советников....

 

А что нужно подправить в выложенных Вами примерах ( в приложении) чтобы они заработали в +600 версии.

Благодарность заранее

Файлы:
 
Для начала почитайте статью Связь с MetaTrader5 через именованные каналы. Сервер, опубликованный в статье, точно так же работает и с четвёрочными скриптами в наших примерах, о которых я говорил несколькими постами ранее
 
stringo:
Для начала почитайте статью Связь с MetaTrader5 через именованные каналы. Сервер, опубликованный в статье, точно так же работает и с четвёрочными скриптами в наших примерах, о которых я говорил несколькими постами ранее


Я наверное неточно выразился. Я не вчера начал изучать этот вопрос. Эти два примера отлично работали в течение года, вплоть до "глобального усовершенствования". После, при компиляции, появились предупреждения и наотрез отказались работать. Очевидно это связано с изменением кодировок строковых. Поскольку своими силами и с помощью форумчан эту проблему не смог решить обратился к разработчикам. У Вас наверное эта правка займет 15 минут а нам поможет и дальше использовать эту возможность каналов.

Вы создали трейдерам столько проблем втюхав им абсолютно сырой терминал и еще более недоделанный эдитор, что Ваше высокомерное "Для начала прочитайте ..." явно не к месту.

И посылать к статьям годовалой давности не нужно. Мы их внимательно читали.

Удачи

 

что-то я не пойму откуда идет проблема,


допустим есть 2 функции чтения и записи файлов

int  ticker;
double loter;
int reverseer;



string startWriteInfo() 
  {
//--------------------------------------------------------------- 2 --
   int Handle;// Файловый описатель
   string      Obj_Name;                    // Имя объекта
//--------------------------------------------------------------- 3 --
   Handle=FileOpen(File_Name,FILE_CSV|FILE_WRITE,";");// Открытие файла
   if(Handle<0) // Неудача при открытии файла
     {
      if(GetLastError()==4103) // Если файла не существует,..
         Comment("startWriteInfo Нет файла с именем ",File_Name);//.. извещаем трейдера 
      else                             // При любой другой ошибке..
      Comment("startWriteInfo Ошибка при открытии файла ",File_Name);//..такое сообщ
      return("-1");                          
     }
//--------------------------------------------------------------- 4 --
   FileWrite(Handle,"ticket;lot;reverse;");
//--------------------------------------------------------------- 8 --
   FileClose(Handle);                // Закрываем файл
   return(Obj_Name);                             
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int startReadTotal(int ticket=0) 
  {
//--------------------------------------------------------------- 2 --
   int Handle;// Файловый описатель
//--------------------------------------------------------------- 3 --
   Handle=FileOpen(File_Name,FILE_CSV|FILE_SHARE_READ,";");// Открытие файла
   if(Handle<0) // Неудача при открытии файла
     {
      
      // Если файла не существует,..
         Print(GetLastError());
         Print("startReadTotal Нет файла с именем ",File_Name);//.. извещаем трейдера 
         startWriteInfo() ;
         Print("startReadTotal Создаем файл данных ",File_Name);//.. извещаем трейдера 
         

      return(-1);                           
     }

   int  tick=StrToInteger(FileReadString(Handle));
   double lot=StrToDouble(FileReadString(Handle));
   int reverse=StrToInteger(FileReadString(Handle));

   if(tick==ticket)
     {
      ticker=tick;
      loter=lot;
      reverseer=reverse;
      return(tick);
     }

   FileClose(Handle);                // Закрываем файл
   return(0);                    // Выход из start()
  }

другими слвоами:

читаем файл, если файла нет - создаем файл,

только вот я поставил чтение файла в режиме совместного доступа, т.е. хотел редактировать файл и чтоб советник одновременно его читал, но пишет ошибку 5004

2014.03.28 10:24:07.427 Exp_-_elrid_v5 CSV read EURCHF,M15: startReadTotal Создаем файл данных TicketDuplicator.csv
2014.03.28 10:24:07.427 Exp_-_elrid_v5 CSV read EURCHF,M15: startReadTotal Нет файла с именем TicketDuplicator.csv
2014.03.28 10:24:07.427 Exp_-_elrid_v5 CSV read EURCHF,M15: 5004
 
получается что я не могу редактировать файл как раньше?
 

интересно такая ошибка возникает только при открытии Екселем.

а вот если обычным редактором