/// <summary> /// 設定を読み出す。 /// </summary> /// <param name="path">パス</param> /// <param name="operations">読み出した値を適用するデータ</param> public static void Load(string path, IOperation[] operations) { System.IO.Stream stream = null; try { stream = System.IO.File.OpenRead(path); using (System.IO.StreamReader sr = new System.IO.StreamReader(stream)) { stream = null; // 読出処理(こっちはセクション区切りがあるのでちょっと面倒) string textData = sr.ReadToEnd(); string[] lines = textData.Split('\n'); IOperationSetting setting = null; for (int i = 0; i < lines.Length; i++) { try { string line = lines[i].Trim(); if (line.StartsWith("[") && line.EndsWith("]")) { // セクション名 string sectionName = line.Substring(1, line.Length - 2); setting = GetOperationSetting(operations, sectionName); } else { // 設定値(多分) int index = line.IndexOf('='); if (index > 0) { string key = line.Substring(0, index).Trim(); string value = line.Substring(index + 1).Trim(); if (setting != null) { setting.SetPropertyValue(key, value); } } } } catch (Exception e) { System.Diagnostics.Debug.WriteLine($"line{i + 1}:{e.Message}"); } } } } finally { stream?.Dispose(); } }
/// <summary> /// 設定を書き込む /// </summary> /// <param name="sw">書き込み先ストリーム</param> /// <param name="operation">オペレーション</param> private static void WriteOperationSetting(System.IO.StreamWriter sw, IOperation operation) { // オペレーション名 sw.WriteLine($"[{operation.Name}]"); IOperationSetting setting = operation.Setting; if (setting != null) { System.Reflection.PropertyInfo[] propInfos = setting.GetType().GetProperties(); foreach (System.Reflection.PropertyInfo pi in propInfos) { if (!pi.CanRead || !pi.CanWrite) { continue; } string value = setting.GetPropertyValue(pi.Name); sw.WriteLine($"{pi.Name} = {value}"); } } sw.WriteLine(); }