Как читать встроенные файлы
Как открывать и читать встроенные файлы в EyeAuras.
Прочитать встроенный README
В проекте C# Script EyeAuras добавьте через Show Files текстовый ресурс README.md с содержимым ниже и вставьте код в Script.csx. Файл должен входить в ресурсы этого проекта. GetService<IScriptFileProvider>() предоставляет контейнер скрипта, обычному helper передайте провайдер явно.
Готовый пример можно импортировать отсюда: https://eu.eyeauras.net/share/S20250309131425bvdreSJs6IeI
Для чего это может пригодиться
- пользовательские конфигурационные файлы
- документация для вашей программы
- JavaScript-файлы, которые будут загружаться в вашем UI
- пользовательские CSS-файлы
Пример
- Создайте ауру.
- Добавьте действие
C# ScriptвOn Enter. - Скопируйте и вставьте сам скрипт.
- Создайте новый Markdown-файл и назовите его
README. - Запустите скрипт.
- Скрипт выведет доступное содержимое корня и текст
README.md. В списке могут быть и другие файлы/каталоги.
Script.csx
{
Log.Info("Hello, World!");
//built-in FileProvider which allows to access script environment files
var fileProvider = GetService<EyeAuras.Repl.IScriptFileProvider>();
var files = fileProvider.GetDirectoryContents("/");
Log.Info($"Script files:\n\t{files.DumpToTable()}");
var readme = fileProvider.GetFileInfo("README.md");
if (!readme.Exists)
{
Log.Warn("README.md не найден однозначно; проверьте полное имя ресурса");
return;
}
using var stream = readme.CreateReadStream();
using var reader = new System.IO.StreamReader(stream);
Log.Info($"README:\n{reader.ReadToEnd()}");
}
README.md
any text
У встроенного провайдера идентичность — полное manifest-имя ресурса. Допустимы точное имя, его полная форма с / и однозначный суффикс на границе имени. Например, ресурс MyProject.docs.README.md можно запросить полным именем MyProject.docs.README.md или MyProject/docs/README.md; голый README.md сработает только при однозначном совпадении. При неоднозначности возвращается not-found, а не случайный первый ресурс. Имена каталогов в диагностическом списке не обещают удаление префикса проекта.
При выполнении скрипта embedded-провайдер ставится перед прежним провайдером; composite выбирает первый существующий файл по порядку провайдеров. Это отдельное правило приоритета, не разрешение неоднозначности внутри embedded-провайдера. Поток и reader закрывает скрипт; общий провайдер из контейнера не освобождайте.
Дальше
Контекст скрипта · Ресурсы и ссылки · Встроенные ресурсы
Контракты сверены со срезом EyeAuras 20fd3d4 и PoeEye 0e02c98. Полные сигнатуры смотрите в SDK/XML своей версии; наличие символа не подтверждает доступность внешнего пакета или нативного компонента. Пример здесь не проверялся компиляцией или запуском.