FileOpen уничтожает файлы в тестере

 

При попытке открыть для чтения существующий файл по адресу

TerminalInfoString(TERMINAL_PATH)\Tester\Agent-127.0.0.1-3000\MQL5\Files\test.txt

(при работе тестера) с помощью

h = FileOpen("test.txt",FILE_READ|FILE_ANSI|FILE_TXT);

файл уничтожается, а не открывается. В чем ошибка?

Спасибо.

 
При старте нового теста удаляются все файлы из папки Files агента тестирования, а в чем проблема?
 
Разделяемые файлы лучше хранить в common пути.
 
А если не нужно возвращать результат, то можно воспользоваться и:
#property tester_file "test.txt"
 
Renat Fatkhullin:
Разделяемые файлы лучше хранить в common пути.

Спасибо, Ренат. Для этого нужно отказаться от использования агента, если я правильно осведомлен. А он мне нужен, поскольку я использую графическую визуализацию тестера. Сам файл мне нужен для использования в тестере. Я его сначала тестером создаю, а при следующем запуске тестера хочу его использовать. Как?

 
Sergey Dzyublik:
А если не нужно возвращать результат, то можно воспользоваться и:

К сожалению,

#property tester_file "test.txt"

не решает проблему. Мне нужен доступ к файлу test.txt из тестера, а #property делает его доступным для чтения при обычной работе советника. Спасибо.

 
foxmag:

Спасибо, Ренат. Для этого нужно отказаться от использования агента, если я правильно осведомлен. А он мне нужен, поскольку я использую графическую визуализацию тестера. Сам файл мне нужен для использования в тестере. Я его сначала тестером создаю, а при следующем запуске тестера хочу его использовать. Как?

Я говорю про флаг FILE_COMMON при работе с файлами, который позволяет работать с файлами в общей разделяемой и неочищаемой папке из терминала и агентов.

Без этого флага файлы используются только локальные. У агентов локальные папки и файлы очищаются.

 
 
- Вы приводите кусок сода без FILE_WRITE:
h = FileOpen("test.txt",FILE_READ|FILE_ANSI|FILE_TXT);

но потом заявляете, что в этот файл результат должен записываться....... Чудеса.


- Имеется ошибочное понимание работы #property tester_file
Читайте справку. Файл, который доступный советнику, копируется в папку Files для каждого отдельного агента тестирования. Это копии файла, и изменения в них не будут сохранены.



На сколько понял, то задачи следующие:
1. Передать файл с входными параметрами на агенты тестирования.
2. Вернуть полученные результаты с агентов тестирования и сохранить их в файл.


Возможные решения:
1. Предложенное Ренатом - через  FILE_COMMON (скорее всего придется добавить FILE_SHARE_READ, возможно и FILE_SHARE_WRITE).
Решение требует минимум изменения кода.
Однако есть минусы:  

- код нельзя будет использовать для тестирования в MQL Cloud;
- если все писать в один файл - возможны проблемы с синхронизацией очередности данных вносимых от разных агентов.


2. Передать файл с входными параметрами на агенты тестирования через  #property tester_file "test.txt".
Возвращать файлы с результатами из агентов тестирования через FrameAdd и обрабатывать их с сохранением в файл через FrameFirst, FrameNext в функции 
OnTesterPass терминала.

 
Sergey Dzyublik:
- Вы приводите кусок сода без FILE_WRITE:

но потом заявляете, что в этот файл результат должен записываться....... Чудеса.

В этом куске сказано лишь о том, что делается попытка открыть файл для чтения. А создан этот файл (т.е. запись в него с FILE_WRITE) сделана ранее, при предыдущем прогоне тестера соответствующим кодом.

Ошибочное понимание возможно, разберусь. Спасибо за подсказки.

 
Renat Fatkhullin:

Я говорю про флаг FILE_COMMON при работе с файлами, который позволяет работать с файлами в общей разделяемой и неочищаемой папке из терминала и агентов.

Без этого флага файлы используются только локальные. У агентов локальные папки и файлы очищаются.

 

Спасибо, проблема решена с использованием FILE_COMMON.

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