OSDN Git Service

艦隊に関する責務をShipInfoからFleetクラスに移す
[kancollesniffer/KancolleSniffer.git] / KancolleSniffer / Status.cs
index 1b020de..d76f28e 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,8 +73,10 @@ 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 + ".tmp"))\r
                 serializer.Serialize(file, this);\r
+            File.Copy(StatusFile + ".tmp", StatusFile, true);\r
+            File.Delete(StatusFile + ".tmp");\r
         }\r
     }\r
 }
\ No newline at end of file