OSDN Git Service

ファイルの読み込みエラーで不正なJSONが返るのを直す
authorKazuhiro Fujieda <fujieda@users.osdn.me>
Tue, 18 Aug 2015 16:45:27 +0000 (01:45 +0900)
committerKazuhiro Fujieda <fujieda@users.osdn.me>
Thu, 20 Aug 2015 12:00:20 +0000 (21:00 +0900)
KancolleSniffer/LogServer.cs

index 920ecdf..97f6378 100644 (file)
@@ -183,28 +183,34 @@ namespace KancolleSniffer
             var csv = path.Replace(".json", ".csv");\r
             var encoding = Encoding.GetEncoding("Shift_JIS");\r
             client.Send(encoding.GetBytes("{ \"data\": [\n"));\r
-            if (File.Exists(csv))\r
+            try\r
             {\r
-                var delimiter = "";\r
-                var material = path.EndsWith("資材ログ.json"); // 末尾の空データを削除する必要がある\r
-                foreach (var line in File.ReadLines(csv, encoding).Skip(1))\r
+                if (File.Exists(csv))\r
                 {\r
-                    var data = line.Split(',');\r
-                    DateTime date;\r
-                    if (!DateTime.TryParseExact(data[0], Logger.DateTimeFormat, CultureInfo.InvariantCulture,\r
-                            DateTimeStyles.AssumeLocal, out date) &&\r
-                        DateTime.TryParse(data[0], CultureInfo.CurrentCulture, DateTimeStyles.AssumeLocal, out date))\r
+                    var delimiter = "";\r
+                    var material = path.EndsWith("資材ログ.json"); // 末尾の空データを削除する必要がある\r
+                    foreach (var line in File.ReadLines(csv, encoding).Skip(1))\r
                     {\r
-                        data[0] = date.ToString(Logger.DateTimeFormat);\r
+                        var data = line.Split(',');\r
+                        DateTime date;\r
+                        if (!DateTime.TryParseExact(data[0], Logger.DateTimeFormat, CultureInfo.InvariantCulture,\r
+                            DateTimeStyles.AssumeLocal, out date) &&\r
+                            DateTime.TryParse(data[0], CultureInfo.CurrentCulture, DateTimeStyles.AssumeLocal, out date))\r
+                        {\r
+                            data[0] = date.ToString(Logger.DateTimeFormat);\r
+                        }\r
+                        if (date < from || to < date)\r
+                            continue;\r
+                        client.Send(encoding.GetBytes(delimiter + "[\"" +\r
+                                                      string.Join("\",\"", (material ? data.Take(9) : data)) + "\"]"));\r
+                        delimiter = ",\n";\r
                     }\r
-                    if (date < from || to < date)\r
-                        continue;\r
-                    client.Send(encoding.GetBytes(delimiter + "[\"" +\r
-                                                  string.Join("\",\"", (material ? data.Take(9) : data)) + "\"]"));\r
-                    delimiter = ",\n";\r
                 }\r
             }\r
-            client.Send(encoding.GetBytes("]}\n"));\r
+            finally\r
+            {\r
+                client.Send(encoding.GetBytes("]}\n"));\r
+            }\r
         }\r
 \r
         private void SendFile(Socket client, string path, string mime)\r