OSDN Git Service

status.xmlかTP.csvが壊れていたらエラーを表示する
authorKazuhiro Fujieda <fujieda@users.osdn.me>
Wed, 21 Mar 2018 05:42:36 +0000 (14:42 +0900)
committerKazuhiro Fujieda <fujieda@users.osdn.me>
Fri, 23 Mar 2018 13:43:27 +0000 (22:43 +0900)
KancolleSniffer/Config.cs
KancolleSniffer/DataLoader.cs
KancolleSniffer/MainForm.cs
KancolleSniffer/Program.cs
KancolleSniffer/Status.cs

index 6636163..91fa500 100644 (file)
@@ -187,9 +187,6 @@ namespace KancolleSniffer
 \r
     public class Config\r
     {\r
-        private readonly string _baseDir = AppDomain.CurrentDomain.BaseDirectory.TrimEnd(Path.DirectorySeparatorChar);\r
-        private readonly string _configFileName;\r
-\r
         public Point Location { get; set; } = new Point(int.MinValue, int.MinValue);\r
         public bool TopMost { get; set; }\r
         public bool HideOnMinimized { get; set; }\r
@@ -229,9 +226,13 @@ namespace KancolleSniffer
         public static readonly Dictionary<string, int> NotificationIndex =\r
             NotificationNames.Select((name, i) => new {name, i}).ToDictionary(entry => entry.name, entry => entry.i);\r
 \r
+\r
+        private const string FileName = "config.xml";\r
+        private static readonly string BaseDir = AppDomain.CurrentDomain.BaseDirectory;\r
+        private static readonly string ConfigFile = Path.Combine(BaseDir, FileName);\r
+\r
         public Config()\r
         {\r
-            _configFileName = Path.Combine(_baseDir, "config.xml");\r
             ConvertPath(PrependBaseDir);\r
         }\r
 \r
@@ -247,7 +248,7 @@ namespace KancolleSniffer
             {\r
                 var serializer = new XmlSerializer(typeof(Config));\r
                 Config config;\r
-                using (var file = File.OpenText(_configFileName))\r
+                using (var file = File.OpenText(ConfigFile))\r
                     config = (Config)serializer.Deserialize(file);\r
                 foreach (var property in GetType().GetProperties())\r
                     property.SetValue(this, property.GetValue(config, null), null);\r
@@ -281,6 +282,10 @@ namespace KancolleSniffer
                 InitializeValues();\r
                 Save();\r
             }\r
+            catch (InvalidOperationException ex)\r
+            {\r
+                throw new Exception(FileName + "が壊れています。", ex);\r
+            }\r
             ConvertPath(PrependBaseDir);\r
         }\r
 \r
@@ -313,7 +318,7 @@ namespace KancolleSniffer
             DecomposeNotificationFlags();\r
             ConvertPath(StripBaseDir);\r
             var serializer = new XmlSerializer(typeof(Config));\r
-            using (var file = File.CreateText(_configFileName))\r
+            using (var file = File.CreateText(ConfigFile))\r
                 serializer.Serialize(file, this);\r
         }\r
 \r
@@ -334,12 +339,12 @@ namespace KancolleSniffer
 \r
         private string StripBaseDir(string path)\r
         {\r
-            if (!path.StartsWith(_baseDir))\r
+            if (!path.StartsWith(BaseDir))\r
                 return path;\r
-            path = path.Substring(_baseDir.Length);\r
+            path = path.Substring(BaseDir.Length);\r
             return path.TrimStart(Path.DirectorySeparatorChar);\r
         }\r
 \r
-        private string PrependBaseDir(string path) => Path.IsPathRooted(path) ? path : Path.Combine(_baseDir, path);\r
+        private string PrependBaseDir(string path) => Path.IsPathRooted(path) ? path : Path.Combine(BaseDir, path);\r
     }\r
 }
\ No newline at end of file
index a1170c1..3cc3629 100644 (file)
@@ -42,9 +42,9 @@ namespace KancolleSniffer
         public static int[] EnemySlot(int id) =>\r
             _maxEq != null ? _maxEq.TryGetValue(id, out var slot) ? slot : null : null;\r
 \r
+        private const string FileName = "TP.csv";\r
 \r
-        private static readonly string TpFile =\r
-            Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "TP.csv");\r
+        private static readonly string TpFile = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, FileName);\r
 \r
         private static Dictionary<int, double> _tpSpec;\r
 \r
@@ -59,6 +59,10 @@ namespace KancolleSniffer
             catch (IOException)\r
             {\r
             }\r
+            catch (Exception ex)\r
+            {\r
+                throw new Exception(FileName + "が壊れています。", ex);\r
+            }\r
         }\r
 \r
         public static double ItemTp(int id) =>\r
index b56bf69..9391406 100644 (file)
@@ -79,14 +79,7 @@ namespace KancolleSniffer
             labelPresetAkashiTimer.BackColor = ShipLabel.ColumnColors[1];\r
             _listForm = new ListForm(_sniffer, _config) {Owner = this};\r
             _notificationManager = new NotificationManager(Alarm);\r
-            try\r
-            {\r
-                _config.Load();\r
-            }\r
-            catch (Exception ex)\r
-            {\r
-                throw new ConfigFileException("設定ファイルが壊れています。", ex);\r
-            }\r
+            _config.Load();\r
             _proxyManager = new ProxyManager(_config, this);\r
             _errorLog = new ErrorLog(_sniffer);\r
             _proxyManager.UpdatePacFile();\r
index a63b2b4..d2fbb06 100644 (file)
@@ -30,12 +30,17 @@ namespace KancolleSniffer
             {\r
                 Application.Run(new MainForm());\r
             }\r
-            catch (MainForm.ConfigFileException ex)\r
+            catch (Exception ex)\r
             {\r
-                MessageBox.Show(ex.Message + "\r\n" +\r
-                                ex.InnerException?.Message + "\r\n" +\r
-                                ex.InnerException?.InnerException?.Message, "エラー",\r
-                    MessageBoxButtons.OK, MessageBoxIcon.Error);\r
+                var inner = ex.InnerException;\r
+                MessageBox.Show(ex.Message +\r
+                                (inner == null\r
+                                    ? ""\r
+                                    : "\r\n" + inner.Message +\r
+                                      (inner.InnerException == null\r
+                                          ? ""\r
+                                          : "\r\n" + inner.InnerException.Message)),\r
+                    "エラー", MessageBoxButtons.OK, MessageBoxIcon.Error);\r
             }\r
         }\r
     }\r
index 1b020de..d82a88a 100644 (file)
@@ -28,8 +28,6 @@ namespace KancolleSniffer
 \r
     public class Status\r
     {\r
-        private readonly string _baseDir = AppDomain.CurrentDomain.BaseDirectory;\r
-        private readonly string _statusFileName;\r
         public static bool Restoring { get; set; }\r
         public Achievement Achievement { get; set; }\r
         public List<MaterialCount> MaterialHistory { get; set; }\r
@@ -39,9 +37,11 @@ namespace KancolleSniffer
         public QuestCount[] QuestCountList { get; set; }\r
         public DateTime QuestLastReset { get; set; }\r
 \r
+        private const string FileName = "status.xml";\r
+        private static readonly string StatusFile = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, FileName);\r
+\r
         public Status()\r
         {\r
-            _statusFileName = Path.Combine(_baseDir, "status.xml");\r
             CondRegenTime = double.MinValue;\r
         }\r
 \r
@@ -52,7 +52,7 @@ namespace KancolleSniffer
                 Restoring = true;\r
                 var serializer = new XmlSerializer(typeof(Status));\r
                 Status status;\r
-                using (var file = File.OpenText(_statusFileName))\r
+                using (var file = File.OpenText(StatusFile))\r
                     status = (Status)serializer.Deserialize(file);\r
                 foreach (var property in GetType().GetProperties())\r
                     property.SetValue(this, property.GetValue(status, null), null);\r
@@ -60,6 +60,10 @@ namespace KancolleSniffer
             catch (FileNotFoundException)\r
             {\r
             }\r
+            catch (InvalidOperationException ex)\r
+            {\r
+                throw new Exception(FileName + "が壊れています。", ex);\r
+            }\r
             finally\r
             {\r
                 Restoring = false;\r
@@ -69,7 +73,7 @@ namespace KancolleSniffer
         public void Save()\r
         {\r
             var serializer = new XmlSerializer(typeof(Status));\r
-            using (var file = File.CreateText(_statusFileName))\r
+            using (var file = File.CreateText(StatusFile))\r
                 serializer.Serialize(file, this);\r
         }\r
     }\r