Функция FileOpen не работает с таким расширением, как *.js

 

Добрый день! У меня есть файл Orders.js в который я хочу внести данные по открытым ордерам. Но для начала нужно файл прочитать в текстовую переменную, чтобы вставить JSON-массив в нужное место и перезаписать файл. Проблема в том, что стандартным способом через FileOpen MQL4 почему-то не хочет читать этот файл. Даже проверку FileIsExist() не проходит. Видимо из-за безопасности так. Может можно какой-то флаг прописать, который позволит читать этот файл?

p.s. когда переименовываю в txt-файл, открывает без проблем.

string readFile(string fileName)
{
   ResetLastError();
   if (FileIsExist(fileName, 0)) {
      int fh = FileOpen(fileName, FILE_READ);
      if (fh != INVALID_HANDLE) {
         string str;
         int n = 0;
         while(!FileIsEnding(fh)) {
            if (n > 0) {
               str += "\r\n";
            }
            str += FileReadString(fh, 20);
            n++;
         }
         FileClose(fh);
         return str;
      } else {
         alertError(__FILE__, __LINE__, GetLastError(), "Не удалось открыть файл " + fileName);
      }
   } else {
      Alert("Файл " + fileName + " не существует.");
   }
   
   return "";
}
Документация по MQL5: Файловые операции / FileOpen
Документация по MQL5: Файловые операции / FileOpen
  • www.mql5.com
FileOpen - Файловые операции - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Elferboy:

Добрый день! У меня есть файл Orders.js в который я хочу внести данные по открытым ордерам. Но для начала нужно файл прочитать, чтобы вставить JSON-массив в нужное место. Проблема в том, что стандартным способом через FileOpen MQL4 почему-то не хочет читать этот файл. Видимо из-за безопасности так. Может можно какой-то флаг прописать, который позволит читать этот файл?

p.s. когда переименовываю в txt-файл, открывает без проблем.

Если коротко, то код такой:

Блокнотом этот файл читается?

 
Alexey Viktorov #:

Блокнотом этот файл читается?

Да.

В этой же папке делаю копию js-скрипта, переименовываю в Orders.txt, снова вызываю функцию readFile("Orders.txt") и всё нормально срабатывает.

 
Elferboy #:

Да.

В этой же папке делаю копию js-скрипта, переименовываю в Orders.txt, снова вызываю функцию readFile("Orders.txt") и всё нормально срабатывает.

У вас слишком мало флагов в строке

      int fh = FileOpen(fileName, FILE_READ);
Добавьте FILE_TXT и может ещё какие-то, а имя файла оставьте с расширением .js, может и получится.
 
Alexey Viktorov #:

У вас слишком мало флагов в строке

Добавьте FILE_TXT и может ещё какие-то, а имя файла оставьте с расширением .js, может и получится.

Пробовал. Если не сложно, перед тем как написать, попробуйте у себя такое реализовать. Если получится, то скиньте код или подсказку, каким образом у вас это получилось сделать.

 
Elferboy #:

Пробовал. Если не сложно, перед тем как написать, попробуйте у себя такое реализовать. Если получится, то скиньте код или подсказку, каким образом у вас это получилось сделать.

Вы мне предлагаете сначала разобраться как создать такой файл, потом его создать и попробовать его прочесть?

 
Alexey Viktorov #:

Вы мне предлагаете сначала разобраться как создать такой файл, потом его создать и попробовать его прочесть?

А зачем давать советы по теме, а которой нет ни понимания ни опыта, только одни фантазии?

 
Elferboy:

Добрый день! У меня есть файл Orders.js в который я хочу внести данные по открытым ордерам. Но для начала нужно файл прочитать, чтобы вставить JSON-массив в нужное место. Проблема в том, что стандартным способом через FileOpen MQL4 почему-то не хочет читать этот файл. Даже проверку FileIsExist() не проходит. Видимо из-за безопасности так. Может можно какой-то флаг прописать, который позволит читать этот файл?

p.s. когда переименовываю в txt-файл, открывает без проблем.

Вам такой файл нужно запустить ?

Снимок экрана 2022-02-07 141935

 
Dmitry Fedoseev #:

А зачем давать советы по теме, а которой нет ни понимания ни опыта, только одни фантазии?

Наверное потому, что вы были в отпуске. Или прогуливали. Да и на совет мои слова отнюдь не похожи. Исключительно мнение и предположение…

 

Дело в том, что я в первом сообщении скинул код и описал задачу, с которой не могу справиться. Код небольшой, это не целая программа, в которую нужно вникать. Вам всего лишь нужно создать у себя вручную js-файл с любым текстом внутри и попробовать его прочитать в текстовую переменную. Код уже есть, он работает для обычных текстовых файлов. Просто подкорректировать для чтения js-файлов.

Пока писал, возникла такая идея: попробовать переименовать файл в Orders.txt, считать его в строковую переменную, сделать там необходимую замену текста, перезаписать содержимое Orders.txt файла и переименовать обратно в файл Orders.js.

Вечером попробую, отпишусь.

 
137 Matrix #:

Вам такой файл нужно запустить ?


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