Проблема с CSV файлами ошибка 5004!!! с TXT читает с CSV не читает

 

Всем привет.

Столкнулся с проблемами на новом билде, проблема с CSV файлами а именно их чтение.!

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

В коде есть функция чтения с CSV файла

extern string FileName="4.csv";

double Lottr[1];
int CloseMin[1];
string Symbolf[1];
string date[1];
string time[1];

int startReadOpen(string File_Name2="")
  {

   string stringToGraph="\n\n\n\n";
//--------------------------------------------------------------- 2 --
   int Handle;
   string File_Name=File_Name2;
//--------------------------------------------------------------- 3 --
   Handle=FileOpen(File_Name,FILE_CSV|FILE_READ|FILE_SHARE_READ|FILE_WRITE|FILE_SHARE_WRITE,";");
  if(Handle==INVALID_HANDLE)
     {
      Print(" Неизвестная ошибка",File_Name,GetLastError()," ");

      if(GetLastError()==4103)
         Print(" Ошибка откртия файла ",File_Name);
      else
         Print(" Неизвестная ошибка",File_Name,GetLastError()," ");
     }
//--------------------------------------------------------------- 4 --
   int time2=1;
   FileReadString(Handle);
   FileReadString(Handle);
   FileReadString(Handle);
   FileReadString(Handle);
   FileReadString(Handle);
//--------------------------------------------------------- 5 --
   for(int i=0;i<100;i++)
     {
      date[i]=FileReadString(Handle);
      time[i]=FileReadString(Handle);
      Symbolf[i]=FileReadString(Handle);
      CloseMin[i]=StrToInteger(FileReadString(Handle));
      Lottr[i]=StrToDouble(FileReadString(Handle));
      time2++;
      ArrayResize(date,time2);
      ArrayResize(time,time2);
      ArrayResize(Symbolf,time2);
      ArrayResize(CloseMin,time2);
      ArrayResize(Lottr,time2);

      if(FileIsEnding(Handle)) break;
     }

//--------------------------------------------------------------- 8 --
   FileClose(Handle);
   return(time2);
  }

так не читает,

а все то же самое но

extern string FileName="4.txt";

читает без проблем.

Запустить можно в режиме визуализации на тестере, кто нибудь сталкивался?

Файлы:
 

файл тхт

Файлы:
4.txt  1 kb
 

файл csv

При чем работает не во всех компьютерах.
в Виндовс 7 - все ок

В Виндовс ХР не работает.

Файлы:
4.zip  1 kb
 
Vladon:

файл тхт

Файлы txt и csv разные. У Вас в txt файл заканчивается переводом строки, а csv нет.

Исправьте csv, и оно будет работать.

 
Mislaid:

Файлы txt и csv разные. У Вас в txt файл заканчивается переводом строки, а csv нет.

Исправьте csv, и оно будет работать.


Спасибо. я думал про это...... просто файл CSV прислали именно такой.

Спасибо за помощь!!!

 

Здравствуйте.

В упор не вижу ошибку 5004 вот в этом коде -

      int file_hand = FileOpen("file//file.txt",FILE_SHARE_WRITE|FILE_READ|FILE_WRITE|FILE_TXT, 0);
      if(file_hand != INVALID_HANDLE)
         FileWrite(file_hand, DoubleToStr(NormalizeDouble(max, 2), 2));
      else
         PrintFormat("Could not open file Write %s, Error code = %d","file//file.txt",GetLastError());
      FileClose(file_hand);

в журнале эксперта: Could not open file Write file//file.txt, Error code = 5004

 
Oleg Arsentev:

Здравствуйте.

В упор не вижу ошибку 5004 вот в этом коде -


в журнале эксперта: Could not open file Write file//file.txt, Error code = 5004

Спецсимвол обозначается не как "//", а вот так: "\\".

 
Ihor Herasko:

Спецсимвол обозначается не как "//", а вот так: "\\".

 К сожалению нет, с моим вариантом файл и записывается и читается, но ошибка в журнале всё-ровно есть!

 По Вашему совету: Could not open file Write file\file.txt, Error code = 5004

      int file_hand = FileOpen("file\\file.txt",FILE_SHARE_WRITE|FILE_READ|FILE_WRITE|FILE_TXT, 0);
      if(file_hand != INVALID_HANDLE)
         FileWrite(file_hand, DoubleToStr(NormalizeDouble(max, 2), 2));
      else
         PrintFormat("Could not open file Write %s, Error code = %d","file\\file.txt",GetLastError());
      FileClose(file_hand);
 
Oleg Arsentev:

 К сожалению нет, с моим вариантом файл и записывается и читается, но ошибка в журнале всё-ровно есть!

 По Вашему совету: Could not open file Write file\file.txt, Error code = 5004 

А как он записывается и читается если у вас 

file_hand == INVALID_HANDLE)

может поможет добавление флага FILE_SHARE_READ , вдруг он открыт кем-то.

Документация по MQL5: Константы, перечисления и структуры / Константы ввода/вывода / Флаги открытия файлов
Документация по MQL5: Константы, перечисления и структуры / Константы ввода/вывода / Флаги открытия файлов
  • www.mql5.com
Файл открывается для чтения. Флаг используется при открытии файлов (FileOpen()). При открытии файла обязательно должен быть указан флаг FILE_WRITE и/или флаг FILE_READ Файл открывается для записи. Флаг используется при открытии файлов (FileOpen()). При открытии файла обязательно должен быть указан флаг FILE_WRITE и/или флаг FILE_READ Файл типа...
 
Oleg Arsentev:

 К сожалению нет, с моим вариантом файл и записывается и читается, но ошибка в журнале всё-ровно есть!

 По Вашему совету: Could not open file Write file\file.txt, Error code = 5004

Зачем слеши в названии. Если пути указывать не дефолтные, то лучше явно, терминал, заметил не всегда в правилах относительных путей. Если нет, то лучше без слешов и все будет в папках терминала Файлс по умолчанию.

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

Если подставлять время в название файла, как есть, то так же будет 5004. Там слеши одинарные в разделителях.

ЗЫ и лучше название файла задавать в переменную, и ее подставлять. Удобней и правильней. Название можно сформировать из ТФ, символа, своих хотелок, даты, часа, минут, секунд.))

 

Перепробовал все варианты ничего не помогает, флаги

FILE_SHARE_READ|FILE_SHARE_WRITE

не дали результата, точнее результат есть код работает, он и работал с одним флагом

FILE_SHARE_WRITE

но ошибка тоже есть, удалил проверку на ошибку открытия, так как это не очень важно в общем то.

Напомню что файл открывается, записывается и читается, но иногда выдаётся ошибка 5004.

Windows 10 (с последними обновлениями)