private void Load(string fileName) { if (File.Exists(fileName)) { string err = ""; try { using StreamReader sr = new StreamReader(fileName); string line; string[] elem; while ((line = sr.ReadLine()) != null) { elem = line.Split('\t'); if (elem.Length != 2) { if (elem.Length == 3) { PropertyInfo pi3 = GetType().GetProperty(elem[0]); if (pi3.PropertyType == typeof(List <ExtensionRule>)) { ((List <ExtensionRule>)pi3.GetValue(this, null)).Add(ExtensionRule.Parse(elem[1], elem[2])); } } continue; } if (elem[0] == "StatusItem") { elem[0] = "StatusItems"; } if (elem[0] == "Logging") { elem[0] = "PlayLog"; } PropertyInfo pi = GetType().GetProperty(elem[0]); if (pi == null) { err += $"存在しない設定項目「{elem[0]}」を読み込もうとしました。\n"; continue; } object?value = null; try { switch (Type.GetTypeCode(pi.PropertyType)) { case TypeCode.Boolean: value = bool.Parse(elem[1]); break; case TypeCode.Byte: value = byte.Parse(elem[1]); break; case TypeCode.Char: value = char.Parse(elem[1]); break; case TypeCode.DBNull: err += $"読み込みに対応していない設定「{elem[0]}」を読み込もうとしました。\n"; continue; case TypeCode.DateTime: value = DateTime.Parse(elem[1]); break; case TypeCode.Decimal: value = decimal.Parse(elem[1]); break; case TypeCode.Double: value = double.Parse(elem[1]); break; case TypeCode.Empty: err += $"読み込みに対応していない設定「{elem[0]}」を読み込もうとしました。\n"; continue; case TypeCode.Int16: value = short.Parse(elem[1]); break; case TypeCode.Int32: value = int.Parse(elem[1]); break; case TypeCode.Int64: value = long.Parse(elem[1]); break; case TypeCode.Object: if (pi.PropertyType == typeof(List <StatusItem>)) { ((List <StatusItem>)pi.GetValue(this, null)).Add(StatusItem.Parse(elem[1])); } else { err += $"読み込みに対応していない設定「{elem[0]}」を読み込もうとしました。\n"; } continue; case TypeCode.SByte: value = sbyte.Parse(elem[1]); break; case TypeCode.Single: value = float.Parse(elem[1]); break; case TypeCode.String: value = elem[1]; break; case TypeCode.UInt16: value = ushort.Parse(elem[1]); break; case TypeCode.UInt32: value = uint.Parse(elem[1]); break; case TypeCode.UInt64: value = ulong.Parse(elem[1]); break; default: err += $"読み込みに対応していない設定「{elem[0]}」を読み込もうとしました。\n"; continue; } pi.SetValue(this, value, null); } catch (Exception e) { err += $"設定「{elem[0]}」の値「{elem[1]}」が以下のエラーのため認識できませんでした。\n メッセージ:{e.Message}\n"; } } } catch (Exception e) { err += $"設定読み込み中に以下のエラーが発生しました。\n メッセージ:{e.Message}\n"; } if (err.Length > 0) { MessageBox.Show(err); } } if (StatusItems.Count == 0) { StatusItems.Add(new StatusItemFullPathName()); StatusItems.Add(new StatusItemPlayGauge()); } }
private static void AddItemInfo(StatusItem item) { items.Add(item.ToString(), item); }