/// <summary> /// Запись настроек в файл по указанному пути /// </summary> /// <param name="configFilePath"></param> /// <param name="settings"></param> private void WriteSettings(string configFilePath, ScriptSettings settings) { var options = new JsonSerializerOptions { // Использование "верблюжьего" стиля для всех имен свойств. // Это выглядит так: camelCase, workFolder, fileName PropertyNamingPolicy = JsonNamingPolicy.CamelCase, // Расширенный (не в одну строку) WriteIndented = true, // Кодировка для Unicode: Basic Latin и Cyrillic Encoder = JavaScriptEncoder.Create(UnicodeRanges.BasicLatin, UnicodeRanges.Cyrillic) }; // Получение строки json закодированной в utf8 байты byte[] jsonUtf8Bytes = JsonSerializer.SerializeToUtf8Bytes(settings, options); // Запись в файл File.WriteAllBytes(configFilePath, jsonUtf8Bytes); }
/// <summary> /// Данная функция является точкой входа. /// <summary> public void Execute(Context context) { // Получаем настройки ScriptSettings settings = ReadSettings(context.ConfigFilePath); // Меняем настройки settings.LastReadConfigDateTime = DateTime.Now; // Сохраняем настройки WriteSettings(context.ConfigFilePath, settings); // Сохраним нужные настройки в контекст робота, // чтобы потом можно было использовать это в процессе выполнения робота context.WorkFolder = settings.WorkFolder; context.FileNames = settings.FileNames; // Далее продолжим выполнять какие-то действия в этом сценарии, // как будто бы что-то нужное делаем с полученными данными DoSomething(context, settings); }
/// <summary> /// Получение настроек из файла по указанному пути /// </summary> /// <param name="configFilePath"></param> /// <returns>Настройки</returns> private ScriptSettings ReadSettings(string configFilePath) { ScriptSettings settings = null; if (File.Exists(configFilePath)) { var options = new JsonSerializerOptions { // Использование "верблюжьего" стиля для всех имен свойств. // Это выглядит так: camelCase, workFolder, fileName PropertyNamingPolicy = JsonNamingPolicy.CamelCase, // Расширенный (не в одну строку) WriteIndented = true, // Кодировка для Unicode: Basic Latin и Cyrillic Encoder = JavaScriptEncoder.Create(UnicodeRanges.BasicLatin, UnicodeRanges.Cyrillic) }; // Чтение json закодированной в utf8 байты byte[] jsonUtf8Bytes = File.ReadAllBytes(configFilePath); // Десериализации settings = JsonSerializer.Deserialize <ScriptSettings>(jsonUtf8Bytes, options); } else { // Если файл отсутствует, то генерируем для примера новый экземпляр настроек // и запишем туда какие-то "стандартные" значения string directory = Path.GetDirectoryName(configFilePath); settings = new ScriptSettings() { LastReadConfigDateTime = DateTime.Now, WaitTime = 1000, WorkFolder = Path.Combine(directory, "Рабочая папка"), FileNames = new List <string> { "Файл 1.txt", "Файл 2.txt", "Файл 3.txt" } }; // Записываем настройки в файл WriteSettings(configFilePath, settings); } return(settings); }
/// <summary> /// Какой-то метод, который что-то делает с полученными данными из настроек /// </summary> /// <param name="context"></param> /// <param name="scriptSettings"></param> private void DoSomething(Context context, ScriptSettings scriptSettings) { // В качестве примера пускай просто записывает текущее время // в файлы, используя имена файлов, рабочую папку и время для пауз if (context.FileNames == null || string.IsNullOrEmpty(context.WorkFolder) || context.FileNames.Count == 0) { return; } Directory.CreateDirectory(context.WorkFolder); foreach (var fileName in context.FileNames) { string text = "Текущее время: " + DateTime.Now.ToString(); string filePath = Path.Combine(context.WorkFolder, fileName); byte[] bytes = Encoding.Default.GetBytes(text); string outputText = Encoding.UTF8.GetString(bytes); File.WriteAllText(filePath, outputText, Encoding.UTF8); Thread.Sleep(scriptSettings.WaitTime); } }