Непонятка с функцией FileReadArray()

 

Вот обнаружил ещё одну проблемку. Функция FileReadArray() согласно описанию "возвращает количество фактически прочитанных элементов".

Но у меня она почему-то возвращает размер исходного массива. Вот например такой код:

  int filehandle=FileOpen("test.txt",FILE_READ|FILE_BIN);
  string array[1000];
  int count=FileReadArray(filehandle,array,0,ArraySize(array));
  Print(count);

Файл "test.txt" может быть либо пустым, либо содержать несколько строк, но в итоге почему-то получаем count==1000, т.е. размер массива. Но столько элементов не могло прочитаться из файла, поскольку там нет такого количества строк (а в первом случае файл вообще был пустой)

 

Немного не так. Вот скрипт, который сначала пишет в файл 100 элементов типа int, а затем пытается в массив типа int размером 30 элементов прочитать из этого же файла 200 элементов (которых там нет, конечно).

//+------------------------------------------------------------------+
//|                                           CheckFileReadArray.mq4 |
//|                      Copyright © 2008, MetaQuotes Software Corp. |
//|                                       http://www.metaquotes.net/ |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2008, MetaQuotes Software Corp."
#property link      "http://www.metaquotes.net/"
 
//+------------------------------------------------------------------+
//| script program start function                                    |
//+------------------------------------------------------------------+
int start()
  {
//----
   int array[100];   // 100 * 4 = 400 байт
   for (int i = 0; i < ArraySize(array); i++) array[i] = i ;
 
  int handle=FileOpen("mydata.dat", FILE_BIN|FILE_WRITE);
  if(handle>0)
    {
     FileWriteArray(handle, array, 0, 100); // writing last 7 elements
     FileClose(handle);
    }
   
   Print("Приготовимся считывать");
   Sleep(10000);  //пауза 10 секунд
   
   int other[30];
   ArrayInitialize(other,0);
   handle=FileOpen("mydata.dat", FILE_BIN|FILE_READ); 
   if(handle>0)
    {
     int readen = FileReadArray(handle, other, 0, 200);
     FileClose(handle);
    }
   Print("readen = ", readen); 
   for (i = 0; i<ArraySize(other);i++) Print("index = ", i, "   value = ", other[i]);
 
//----
   return(0);
  }
//+------------------------------------------------------------------+

В итоге размер принимающего массива становится равным 200, но прочитано реально из файла только 100 элементов.



 

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