Работа с файлами в cTrader
В этой статье и соответствующем видео мы объясним, как вы можете работать с файлами в cTrader. В среднем пользователи обеспокоены запуском сиБотов или индикаторов, запрашивающих полные права доступа к их устройству. Особенно когда исходный код недоступен, трудно понять, что алгоритм делает с этими разрешениями. К счастью, cTrader предоставляет несколько методов, которые позволяют алгоритмам получать доступ к файлам на локальной машине без необходимости повышенных разрешений.
Запись в директорию алгоритма
cTrader позволяет всем алгоритмам получать доступ к папке по этому адресу:
C:/Users/{username}/Documents/cAlgo/Data/{algoType}
, где algoType — это cBots или Indicators.
Мы создадим пример сиБота и продемонстрируем, как вы можете получить доступ к этой директории программно.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | |
Как обычно, мы сохраняем и собираем сиБота, затем создаем его экземпляр.
После запуска экземпляра мы можем перейти к папке, определенной выше. В ней мы должны увидеть файл Hello World.txt, содержащий текст, который мы указали в нашем коде.
Чтение из директории алгоритма
Следующий шаг — прочитать содержимое файла, расположенного в директории алгоритма. Для этого мы можем переписать наш метод OnStart() следующим образом.
1 2 3 4 | |
После того как мы соберем и запустим нашего сиБота, мы увидим, что алгоритм выводит строку из файла в журнал cTrader.
Доступ к другим директориям
Обратите внимание, что ни одна из операций, которые наш сиБот выполнял ранее, не требовала предоставления ему повышенных прав доступа. Фактически, права доступа были явно установлены на None на уровне класса.
Мы попробуем записать в файл, расположенный в другой директории, и посмотрим, что произойдет. Мы изменим наш код, чтобы записать в файл, расположенный в корневой директории Documents.
1 2 3 4 | |
Как только мы снова соберем и запустим сиБота, мы увидим исключение в журнале, указывающее, что у нас нет разрешения на запись в эту конкретную директорию.
Чтобы решить эту проблему, мы можем вернуться к коду сиБота и изменить его права доступа следующим образом.
1 | |
Мы собираем и запускаем сиБота. Вместо того чтобы выдавать исключение, бот теперь получит доступ к указанному каталогу и запишет данные в правильный файл.
Для еще одной демонстрации того, как работают права доступа, мы изменим метод OnStart() следующим образом.
1 2 3 4 | |
Мы также вернем права доступа обратно к None.
1 | |
После запуска сиБота мы увидим, что он не может прочитать данные из файла.