Не работает, код который работал раньше(((

 

Есть код, типовой функции 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;

   } 

 

Вот нашел, имеется функция, но файл 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); 

} 

 

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

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

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

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

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

 int GetSymbols(string &SymbolsList[])

} 

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

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

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

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

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