Запись в файл.....?

 
Собственно сабж....
Можно ли из пользовательского индикатора записывать значения в файл?

У меня при попытке записи выдается ошибка ERR_SOME_FILE_ERROR.
 
Возможно, файл для записи был открыт другой программой в это время.
 
Файл скорее всего открыт метатрейдером, поскольку индикатор весит на графике. Однако в коде индикатора файл открывается и закрывается....
 
Файл скорее всего открыт метатрейдером, поскольку индикатор весит на графике. Однако в коде индикатора файл открывается и закрывается....


Собственно, об этом и говорю, метатрейдер закрыл файл, в этол время юзер решил посмотреть что-там (или другой код к нему обратился), индикатор попытался еще раз открыть для записи , и вот ошибка.. Как вариант.
 
Файл скорее всего открыт метатрейдером, поскольку индикатор весит на графике. Однако в коде индикатора файл открывается и закрывается....


Собственно, об этом и говорю, метатрейдер закрыл файл, в этол время юзер решил посмотреть что-там (или другой код к нему обратился), индикатор попытался еще раз открыть для записи , и вот ошибка.. Как вариант.


Хорошо, а как тогда сделать? Пытаюсь вот так, но кроме одного значения ничего не пишется.....

int handle,err;
      
      handle=FileOpen("Values.csv",FILE_CSV|FILE_WRITE|FILE_READ, ';');
      err= GetLastError();
      if (err!= 0) {
           Comment("err=",err);
           return (0); 
     //      handle=FileOpen("Values.csv", FILE_CSV|FILE_WRITE|FILE_READ, ';');
           }
      if(handle>0)
      { 
         Comment("err1=",err);
         FileSeek(handle, 0, SEEK_SET);
         
         FileWrite(handle, UP,DN );
         err= GetLastError();
         if (err!= 0) {
            Print("Ошибка записи в файл - ", err);
            return (0);
            }

         FileClose(handle);
      }

      i--;
     
   } 
 
Если хотите дописать в конец файла, то вместо
FileSeek(handle, 0, SEEK_SET);
нужно использовать
FileSeek(handle, 0, SEEK_END);
 
Если хотите дописать в конец файла, то вместо
FileSeek(handle, 0, SEEK_SET);
нужно использовать
FileSeek(handle, 0, SEEK_END);


Большое спасибо, это моя невнимательность.....Все работает.
 
Все тот-же вывод значений в файл.....вывожу значения котировок, часть данных выводится нормально, часть нет.....И это все беспорядочно чередуется.
Подскажите, в чем может быть проблема?


янв.44 янв.31 янв.34
янв.51 янв.26 янв.49
янв.49 янв.32 янв.38
янв.46 янв.36 янв.45
янв.48 янв.32 янв.32
1.194 янв.31 янв.39
янв.77 1.192 янв.75
янв.91 янв.15 янв.15
янв.18 1.1801 1.1811
1.1838 1.1808 1.1826
1.1829 1.1806 1.182
1.183 1.1815 1.1816
1.1827 1.1815 1.1821
1.1825 1.1819 1.1822
1.1823 1.181 1.1811
 
Приведите полный код вывода, пожалуйста.
Без этого можно только делать догадки.
 
Приведите полный код вывода, пожалуйста.
Без этого можно только делать догадки.


Данные пишутся в 2 файла.........поскольку цены неправильные, индикатор тоже считается не верно. Но на графике все отображается как надо.

int start()
  {
   int    i,counted_bars=IndicatorCounted();
   double Brick=0,DN=0,UP=0,BricksUp=0,BricksDn=0,Value1=0;
   string timeStr;
   int handle,err;
//---- 
   if (Bars<=Smooth) return(0);
   i=Bars-Smooth-1; 
   if(counted_bars>=Smooth) i=Bars-counted_bars-1;
   
//---- 
//   Value1=iATR(NULL,0,Smooth,0); 
//---- 
   while(i>=0)
   {
      if(i==Bars-Smooth-1)  // Первый бар
         {
            UP=High[i];
            DN=Low[i];
            Brick=Stap*(High[i]-Low[i]);
            handle=FileOpen("Renko.csv",FILE_CSV|FILE_WRITE, ';');
            FileSeek(handle, 0, SEEK_SET);
            FileWrite(handle, "RenkoUP","RenkoDN","DATE","TIME","i","High[i]","Low[i]","Close[i]","Value1","Brick","BricksUp","BricksDn");
            FileClose(handle);
         }
      else
         {
           if (Close[i]>UP+Brick)
             {
               BricksUp=MathFloor((Close[i]-UP)/Brick)*Brick;
               UP=UP+BricksUp;
               Value1=iATR (NULL,0,Smooth,i); 
               Brick=Stap*Value1;
               DN=UP-Brick;
               BricksDn=0;
             }  
           if (Close[i]<DN-Brick)
             {   
               BricksDn=MathFloor((DN-Close[i])/Brick)*Brick;  
               DN=DN-BricksDn;
               Value1=iATR(NULL,0,Smooth,i); 
               Brick=Stap*Value1;       
               UP=DN+Brick;
               BricksUp=0;
             }
          // else //{
                //UP = ExtMapBuffer1[i-1];
                //DN = ExtMapBuffer2[i-1]; }  
         } 
      ExtMapBuffer1[i]=UP;
      ExtMapBuffer2[i]=DN;

      int handleQuotes;
      
      handle=FileOpen("Renko.csv",FILE_CSV|FILE_WRITE|FILE_READ, ';');
      handleQuotes=FileOpen("Quotes.csv",FILE_CSV|FILE_WRITE|FILE_READ, ';');
      err= GetLastError();
      if (err!= 0) {
           Comment("err=",err);
           return (0); 
           }
      if(handle>0)
      { 
         Comment("err1=",err);
         FileSeek(handle, 0, SEEK_END);
         FileSeek(handleQuotes, 0, SEEK_END);
         
         FileWrite(handle, ExtMapBuffer1[i],ExtMapBuffer2[i],TimeToStr(Time[i],TIME_DATE),TimeToStr( Time [i],TIME_MINUTES),i,High[i],Low[i],Close[i],Value1,Brick,BricksUp,BricksDn);
         FileWrite(handleQuotes,i,High[i],Low[i],Close[i] );
         
         err= GetLastError();
         if (err!= 0) {
            Print("Ошибка записи в файл - ", err);
            return (0);
            }

         FileClose(handle);
         FileClose(handleQuotes);
      }

      i--;
     
   }
//----
   return(0);
  }
 
А кто будет дескрипторы файлов перед return (0) закрывать?
Причина обращения: