А что в mql4 работа с файлами косячит или я чего-то не пойму?

 

Реализую такую конструкцию:


handle = FileOpen(StringConcatenate(ImportSymbol, ".exp"), FILE_CSV|FILE_READ);
check = GetLastError();
if (check != 0) {
Alert(StringConcatenate("Error: ", check));
return(check);
}
i = 0;
while (!FileIsEnding(handle)) {
Trade[i] = FileReadString(handle);
Print(Trade[i]);
i++;
}
FileClose(handle);


В итоге регулярно вылетает 4099 ошибка - ERR_END_OF_FILE - Конец файла. В чем дело?

Разве этого while(!FileIsEnding(handle)) не достаточно, чтобы уберечься от этой ошибки?

 

Перед чтением надо файловый указатель переместить в начало файла.

Файл надо сначала прочитать или записать, а только потом проверять на конец строки или конец файла.

 
Zhunko >>:

Перед чтением надо файловый указатель переместить в начало файла.

Файл надо сначала прочитать или записать, а только потом проверять на конец строки или конец файла.

Спасибо за попытку помочь, но вы не правы... А начудил я в своем коде, докуменатцию надо читать внимательно...

Вставил приблизительно такой код:



handle = FileOpen(StringConcatenate(ImportSymbol, ".exp"), FILE_CSV|FILE_READ);
if (handle == -1) {
Alert(StringConcatenate("Error: ", GetLastError()));
return(check);
}



Сразу все заработало. Ни устанавливать указатель перед чтением не надо он устанавливается сам после открытия файла, ни читать-писать перед проверкой тоже не надо - все работает, как и предполагалось.

 
bvn >>:

Спасибо за попытку помочь, но вы не правы... 

Zhunko  прав 

 
sergeev писал(а) >>

Zhunko прав

абсалютно нет

 
Более интеерсная тема - FileOpen(StringConcatenate(ImportSymbol, ".exp"), FILE_CSV|FILE_READ); - функция в функции, интересно для какой функции GetLastError() будет возвращать ошибку?
 
Integer >>:
Более интеерсная тема - FileOpen(StringConcatenate(ImportSymbol, ".exp"), FILE_CSV|FILE_READ); - функция в функции, интересно для какой функции GetLastError() будет возвращать ошибку?

Для последней выполненной, т.е. FileOpen(). По умолчаю файловый указатель (при открытии файла) устанавливается на его начало

 
Integer >>:

абсалютно нет

Может будут какие-нибудь аргументы?

Всего лишь, перечислил основные эмпирические правила работы с CSV-файлами средствами MQL4, которые позволят избежать многие непонятные проблемы при работе с этими файлами.

 
При открытии файла указатель сам устанавливается в начало
 
Integer >>:
При открытии файла указатель сам устанавливается в начало

Может не установиться.

Причина обращения: