Скачать MetaTrader 5
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Закажи разработку и отслеживай ее через мобильный телефон.
rabanik
426
rabanik 2016.05.30 14:58 

Есть код, типовой функции init.

Смысл в том, что в этой функции собирался массив возможных валютных пар.

Валютные пары я описываю в глобальной переменной через знак ";".

Но проблема в том, что ранее работавшая функция теперь не работает, т.к. не открывается файл "symbols.raw".

В чем может быть проблема? Понимаю, что  слишком замысловатый вопрос но все же, может кто из профессионалов знает в чем причина?

Спасибо.

Вот код, функции: 

void init() {

   // найдем все валютные пары в терминале

   string smbs[];

   int hFile = FileOpenHistory("symbols.raw", FILE_BIN|FILE_READ); if(hFile<0) return(-1);

   int nSmb  = FileSize(hFile)/1936;

   ArrayResize(smbs, nSmb);

   for(int i=0; i<nSmb; i++) { smbs[i] = FileReadString(hFile, 12); FileSeek(hFile, 1924, SEEK_CUR); } 

   // прочитаем строку

   int k,mk; string buf;

   for(i=0;i<20;i++) {

      int dp=StringFind(symbols,";",mk);

      if(dp==-1) {

         buf=StringSubstr(symbols,mk,StringLen(symbols)-mk);

         if(buf!="") {

            for(k=0;k<nSmb;k++) {

               if(buf==smbs[k]) {

                  symbnum++; ArrayResize(symb,symbnum);

                  symb[symbnum-1]=buf;

                  break;

                  }

               }            

            }

         break;

         }

      buf=StringSubstr(symbols,mk,dp-mk);

      for(k=0;k<nSmb;k++) {

         if(buf==smbs[k]) {

            symbnum++; ArrayResize(symb,symbnum);

            symb[symbnum-1]=buf;

            break;

            }

         }

      mk=dp+1;

      }

   ArrayResize(TimeS,symbnum);

   return;

   } 

rabanik
426
rabanik 2016.05.30 15:07  

Вот нашел, имеется функция, но файл symbols.raw не читается (((((((((((((((((((((((

 int GetSymbols(string &SymbolsList[])

{
// Открываем файл  symbols.raw
   
   int hFile = FileOpenHistory("symbols.raw", FILE_BIN|FILE_READ);
   if(hFile < 0) return(-1);

// Определяем количество символов, зарегистрированных в файле
   
   int SymbolsNumber = FileSize(hFile) / 1936;
   ArrayResize(SymbolsList, SymbolsNumber);

// Считываем символы из файла
   
   for(int i = 0; i < SymbolsNumber; i++)
   {
      SymbolsList[i] = FileReadString(hFile, 12);
      FileSeek(hFile, 1924, SEEK_CUR);
   }
   
// Возвращаем общее количество инструментов
   
   return(SymbolsNumber); 

} 

Алексей Тарабанов
7220
Алексей Тарабанов 2016.05.30 19:23  

Я бы, как минимум, два вопроса задал:

1. Отчего Вы решили, что проблема в том, что этот файл  не читается? К ответу желательно приложить системные сообщения. 

2. Когда Вы это обнаружили и как давно непосредственно перед этим все было хорошо?  

rabanik
426
rabanik 2016.05.30 19:47  
Спасибо, за помощь. Это мой старый советник, и года 2 назад а может и больше он работал ))). Теперь же как я понял, после 600 билда из-за расположения папок такая возможность исчезла. Когда я делаю отладку то на строке: int hFile = FileOpenHistory("symbols.raw", FILE_BIN|FILE_READ); значение hFile возвращается = -1. ((( Все дальше советник не работает ((( Поделитесь пожалуйста или подскажите как возможно обойти данную проблему? Не хотелось бы менять расположение файлов. Меня устаивает папка AppData. Спасибо.
Vitalie Postolache
11045
Vitalie Postolache 2016.05.30 20:12  
rabanik:

Вот нашел, имеется функция, но файл symbols.raw не читается (((((((((((((((((((((((

 int GetSymbols(string &SymbolsList[])

} 

Может стоит добавить опцию  FILE_SHARE_READ (а то и FILE_SHARE_WRITE)? По крайней мере в справке рекомендуют указывать принудительно режим совместного  доступа к файлу, что в старой версии языка было необязательно.

Алексей Тарабанов
7220
Алексей Тарабанов 2016.05.30 20:44  
rabanik:
Спасибо, за помощь. Это мой старый советник, и года 2 назад а может и больше он работал ))). Теперь же как я понял, после 600 билда из-за расположения папок такая возможность исчезла. Когда я делаю отладку то на строке: int hFile = FileOpenHistory("symbols.raw", FILE_BIN|FILE_READ); значение hFile возвращается = -1. ((( Все дальше советник не работает ((( Поделитесь пожалуйста или подскажите как возможно обойти данную проблему? Не хотелось бы менять расположение файлов. Меня устаивает папка AppData. Спасибо.
Если советник мой и по-прежнему мне интересен, я бы просто переписал код от корки до корки. Нельзя без разминки больше двух лет :) 
rabanik
426
rabanik 2016.05.31 12:58  
tara:
Если советник мой и по-прежнему мне интересен, я бы просто переписал код от корки до корки. Нельзя без разминки больше двух лет :) 

добавил в конце функции: FileClose(hFile); 

все заработало. О как)))!!! 

Спасибо всем за помощь. 

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