Скачать MetaTrader 5

Каракули при открытии файла FileOpen codepage

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Зарегистрируйся, чтобы опубликовать статью и получить 200 USD
Vladislav Andruschenko
91899
Vladislav Andruschenko 2015.09.14 14:42 

Всем привет. 

Кто сталкивался с таким непонятным явлением как каракули при открытии файла с МТ4?

 

Например МТ5 - МТ5:

записываем файл с терминала МТ5 с текстом "TEST"

читаем этот же файл в терминале МТ5 = все ок, читается  "TEST"

 

 

Например МТ4 - МТ5:

записываем файл с терминала МТ4 с текстом "TEST"

читаем этот же файл в терминале МТ5 = читаются каракули :-)

 

кодовая страница везде стоит = 0

 

  Print("CODEPAGE="+TerminalInfoInteger(TERMINAL_CODEPAGE));

выдает всегда 0  и на МТ4 и на МТ5

 

 

записываем файл просто:

void WriteFile(string path,string buffer)
  {

//--- Общая папка всех клиентских терминалов
   string common_data_path=TerminalInfoString(TERMINAL_COMMONDATA_PATH);
   int Handle,// Файловый описатель
   Stl;                            // Стиль вертикальной линии
   string File_Name=path;        // Имя файла
   string      Obj_Name;                    // Имя объекта
//--------------------------------------------------------------- 3 --
   Handle=FileOpen(File_Name,FILE_CSV|FILE_WRITE|FILE_SHARE_WRITE|FILE_COMMON,";");// Открытие файла
   if(Handle==INVALID_HANDLE) // Неудача при открытии файла
     {
      if(GetLastError()==4103) // Если файла не существует,..
         Print("Нет файла с именем ",File_Name);//.. извещаем трейдера 
      else
        {                    // При любой другой ошибке..
         Print(Handle+"  Ошибка при открытии файла ",GetLastError()," ",File_Name);//..такое сообщ
         Print("common_data_path ",common_data_path);//..такое сообщ

        }
     }
//--------------------------------------------------------------- 4 --
   FileWrite(Handle,buffer);
//--------------------------------------------------------------- 8 --
   FileClose(Handle);                // Закрываем файл

  }

 

 

читаем также просто:

 

string ReadFile(string path)
  {
   string buffer;
//--- Общая папка всех клиентских терминалов
   string common_data_path=TerminalInfoString(TERMINAL_COMMONDATA_PATH);
   long Handle,// Файловый описатель
   Stl;                            // Стиль вертикальной линии
   string File_Name=path;        // Имя файла
   string      Obj_Name;                    // Имя объекта
//--------------------------------------------------------------- 3 --
   Handle=FileOpen(File_Name,FILE_TXT|FILE_READ|FILE_SHARE_READ|FILE_COMMON);// Открытие файла
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
   if(Handle<0) // Неудача при открытии файла
     {
      if(GetLastError()==4103) // Если файла не существует,..
         Comment("No file ",File_Name);//.. извещаем трейдера 
      else                             // При любой другой ошибке..
      Comment("error  ",File_Name);//..такое сообщ
      return("");                          // Выход из start()      
     }
//--------------------------------------------------------------- 4 --
   while(!FileIsEnding(Handle))
      buffer=buffer+FileReadString(Handle);
//--------------------------------------------------------------- 8 --
   FileClose(Handle);                // Закрываем файл
   return(buffer);
  }

 

Функции стандартные, кодовая страница не указана, по умолчанию  codepage=CP_ACP 

но почему то когда читаешь файл с мт4 на терминале МТ5 появляются каракули.

ХМ 

Slawa
Модератор
6842
Slawa 2015.09.14 15:37  

Вы нигде не указываете явно флаг FILE_ANSI или FILE_UNICODE

По умолчанию четвёрка работает с ансишными файлами. Пятёрка по умолчанию работает с юникодными файлами

Vladislav Andruschenko
91899
Vladislav Andruschenko 2015.09.14 15:37  
Спасибо большое. 
Vladislav Andruschenko
91899
Vladislav Andruschenko 2015.09.14 15:38  
кстати с терминала мт5 все читается ок на терминале мт4. а вот наоборот не получается. Спасибо. 
Slawa
Модератор
6842
Slawa 2015.09.14 15:43  
Vladislav Andruschenko:
кстати с терминала мт5 все читается ок на терминале мт4. а вот наоборот не получается. Спасибо. 
При открытии текстового файла (txt или csv) производится автоматический анализ первых двух байт файла (0xFEFF). Если этот символ есть, то файл автоматически открывается с флагом FILE_UNICODE
Vladislav Andruschenko
91899
Vladislav Andruschenko 2015.09.14 15:55  
буду знать спасибо. 
Vladislav Andruschenko
91899
Vladislav Andruschenko 2015.09.14 15:58  

добавил только в мт5 эксперта FILE_ANSI 

все заработало. Спасибо.  

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий