Операции с файлами
Пользователи платформы выражают обоснованную обеспокоенность по поводу запуска сиБотов и индикаторов с AccessRights.FullAccess. Это особенно актуально, когда исходный код недоступен, трудно точно знать, какие изменения будут внесены алгоритмом в файловую систему. В руководстве по правам доступа мы уже рекомендовали, чтобы сиБоты и индикаторы, которыми вы делитесь с другими, получали AccessRights.None.
Это руководство по API объясняет, как алгоритмы с ограниченными AccessRights могут безопасно выполнять операции с локальными файлами.
Операции с файлами за одну минуту!
- Функция операций с файлами позволяет алгоритмам с ограниченными правами доступа работать с файлами и папками только внутри выделенной папки.
- Имя папки соответствует имени сиБота или индикатора.
- Все остальные каталоги файловой системы пользователя остаются надежно защищенными от несанкционированного доступа.
- В API функция операций с файлами поддерживается только для алгоритмов .NET 6.0.
Правила операций с файлами
Любому алгоритму с ограниченными правами доступа разрешено выполнять операции с файлами только в выделенной папке файловой системы пользователя. Каждый тип алгоритма размещает свою собственную папку, как показано ниже (например, сиБоты и индикаторы), при этом для каждого имени алгоритма создается отдельная папка.
Documents
|-cAlgo
|-Data
|-cBots
|-${cBot Name}
|-Indicators
|-${Indicator Name}
Примечание
Функция операций с файлами доступна только для алгоритмов .NET 6.0.
Следующие правила определяют, как функция операций с файлами работает в API:
1. Каждый алгоритм имеет доступ только к папке, соответствующей его имени (включая подпапки, если таковые имеются).
2. Если соответствующей папки нет, такая папка создается в файловой системе согласно приведенной выше схеме при первом запуске экземпляра.
3. Если новую папку невозможно создать, сиБот или индикатор не запустится, и будет сообщено об ошибке.
4. В коде алгоритма вам не нужно указывать полный путь к соответствующей папке. Вместо этого алгоритмы используют относительный путь.
5. Пространство имен System.IO предлагает множество классов (File, FileInfo, Directory. DirectoryInfo, Path и т. д.) для которых можно вызывать соответствующие методы для выполнения операций с файлами и папками.
Ниже приведены некоторые примеры методов, включенных в классы File и Directory.
| Метод | Описание |
|---|---|
File.Create() | Создает или перезаписывает файл в выделенном каталоге. |
File.WriteAllText() | Создает новый файл, записывает указанную строку в файл и закрывает файл. |
File.Copy() | Копирует существующий файл в новый файл. Перезапись файла с тем же именем не допускается. |
File.Delete() | Удаляет файл в выделенном каталоге. |
Directory.CreateDirectory() | Создает папку или подпапку. |
Directory.Delete() | Удаляет папку или подпапку. |
Directory.Exists() | Проверяет, существует ли указанная директория. |
Directory.Move() | Перемещает существующую директорию в новую указанную директорию. |
Пример использования
При вызове метода TakeChartshot() не нужно указывать полный путь к целевой директории после File.WriteAllBytes. Благодаря функции работы с файлами чартшот будет сохранен в соответствующую директорию алгоритма, даже если права доступа установлены как AccessRights.None.
Пример создания сиБота
В приведенном ниже примере сиБот имеет AccessRights.None, но создает текстовый файл в соответствующей папке с именем "File Access Test" сразу после инициализации. Если рыночный ордер успешно размещен в OnStart(), сиБот записывает идентификатор позиции в созданный файл.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | |
Параметр File
Тип параметра File позволяет алгоритмам принимать файлы от пользователей через API. Он дает алгоритмам возможность безопасно читать данные из выбранного пользователем файла на локальной машине и записывать их в него.
При определении в алгоритме:
- В пользовательском интерфейсе cTrader параметр отображается как текстовое поле с кнопкой Обзор, которая открывает диалоговое окно выбора файла.
- В cTrader CLI пользователи могут передать путь к файлу непосредственно в качестве значения параметра.
- Алгоритм получает строго типизированный объект
Fileсо встроенными методами чтения и записи.
Примечание
Доступ к файлу ограничен только файлом, явно предоставленным пользователем, и не дает неограниченного доступа к локальной файловой системе.
Тип параметра File можно использовать для выполнения следующих операций в алгоритмах:
| Операция | Примеры |
|---|---|
| Ввод внешних данных | Чтение CSV- или текстовых файлов, загрузка пользовательских наборов данных. |
| Постоянный вывод | Запись логов в файл, экспорт результатов. |
| Обработка конфигурации | Загрузка внешних файлов конфигурации, управление большими наборами параметров. |
Чтобы определить параметр файла, объявите свойство типа File и добавьте к нему атрибут [Parameter].
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | |
DefaultValue можно использовать для предварительного заполнения параметра путем к файлу, а тип File предоставляет набор высокоуровневых методов для взаимодействия с содержимым файла. Вы можете прочитать весь файл как текст или как отдельные строки.
1 2 | |
Операции записи перезаписывают существующее содержимое файла.
1 | |
Вы можете добавлять текст или несколько строк без перезаписи существующего содержимого.
1 2 | |
Перед выполнением операций вы можете проверить, существует ли файл.
1 2 3 4 | |
Обзор
Функция работы с файлами в API по-прежнему позволяет алгоритмам с ограниченными правами доступа работать с локальными файлами и папками. Вы можете использовать методы из пространства имен System.IO языка C# для программирования того, как алгоритмы будут выполнять такие операции в пределах соответствующей папки. Таким образом, другие директории в файловой системе пользователя остаются полностью защищенными, даже если исходный код алгоритма недоступен.

