/// <summary> /// xmlの内容を全て取得する /// </summary> /// <returns>RodDBModel</returns> private FishDBModel getFishDB(string iRodName) { string xmlFilename = PATH_FISHDB + @"\" + iRodName + ".xml"; FishDBModel fishdb = new FishDBModel(iRodName); if (File.Exists(xmlFilename)) { for (int i = 0; i < Constants.FILELOCK_RETRY_COUNT; i++) { try { using (FileStream fs = new FileStream(xmlFilename, FileMode.Open, FileAccess.Read, FileShare.Read)) { XmlSerializer serializer = new XmlSerializer(typeof(FishDBModel)); fishdb = (FishDBModel)serializer.Deserialize(fs); } break; } catch (IOException) { Thread.Sleep(100); continue; } } } return fishdb; }
/// <summary> /// xmlに登録内容を書き出す /// </summary> /// <param name="iFishDB">RodDBModel</param> /// <returns>True:成功</returns> private bool putFishDB(string iRodName, FishDBModel iFishDB) { string xmlFilename = PATH_FISHDB + @"\" + iRodName + ".xml"; for (int i = 0; i < Constants.FILELOCK_RETRY_COUNT; i++) { try { using (FileStream fs = new FileStream(xmlFilename, FileMode.Create, FileAccess.Write, FileShare.None))//ファイルロック { StreamWriter sw = new StreamWriter(fs, new UTF8Encoding(false)); XmlSerializerNamespaces ns = new XmlSerializerNamespaces(); ns.Add(String.Empty, String.Empty); XmlSerializer serializer = new XmlSerializer(typeof(FishDBModel)); serializer.Serialize(sw, iFishDB, ns); //書き込み sw.Flush(); sw = null; fs.Close(); } break; } catch (IOException) { Thread.Sleep(100); continue; } } return true; }
/// <summary> /// xmlファイルをコンバートする(1.0.0→1.0.5) /// </summary> private void convert1_0_0to1_0_5(string iXmlFileName, string iRodName) { FishDBModel1_0_0 fishdb1_0_0 = getFishDB1_0_0(iRodName); FishDBModel fishdb1_0_5 = new FishDBModel(); fishdb1_0_5.Version = "1.0.5"; fishdb1_0_5.RodName = fishdb1_0_0.RodName; foreach (FishDBFishModel1_0_0 fish1_0_0 in fishdb1_0_0.Fishes) { FishDBFishModel fish1_0_5 = new FishDBFishModel(); //FishDBFishTypeKind.Monster→FishDBFishTypeKind.UnknownMonster if (fish1_0_0.FishType == FishDBFishTypeKind.Monster) { fish1_0_0.FishType = FishDBFishTypeKind.UnknownMonster; } fish1_0_5.FishType = fish1_0_0.FishType; //FishName if (fish1_0_0.FishType == FishDBFishTypeKind.UnknownSmallFish || fish1_0_0.FishType == FishDBFishTypeKind.UnknownLargeFish || fish1_0_0.FishType == FishDBFishTypeKind.UnknownItem || fish1_0_0.FishType == FishDBFishTypeKind.UnknownMonster || fish1_0_0.FishType == FishDBFishTypeKind.Unknown) { if (fish1_0_0.IDs.Count > 0) { fish1_0_5.FishName = FishDB.GetTmpFishNameFromFishType(fish1_0_0.FishType, fish1_0_0.IDs[0].ID1, fish1_0_0.IDs[0].ID2, fish1_0_0.IDs[0].ID3, fish1_0_0.IDs[0].ID4); } else { fish1_0_5.FishName = fish1_0_0.FishName; } } else { fish1_0_5.FishName = fish1_0_0.FishName; } //ID foreach (FishDBIdModel1_0_0 id1_0_0 in fish1_0_0.IDs) { FishDBIdModel id1_0_5 = new FishDBIdModel(); id1_0_5.ID1 = id1_0_0.ID1; id1_0_5.ID2 = id1_0_0.ID2; id1_0_5.ID3 = id1_0_0.ID3; id1_0_5.ID4 = id1_0_0.ID4; id1_0_5.Count = id1_0_0.Count; id1_0_5.Critical = id1_0_0.Critical; id1_0_5.ItemType = FishDBItemTypeKind.Common; fish1_0_5.IDs.Add(id1_0_5); } //エリア 初期化する fish1_0_5.ZoneNames = new List<string>(); //エサ fish1_0_5.BaitNames = fish1_0_0.BaitNames; fishdb1_0_5.Fishes.Add(fish1_0_5); } //バックアップ string backupFileName = iXmlFileName + ".bak"; if (File.Exists(backupFileName)) File.Delete(backupFileName); File.Copy(iXmlFileName, backupFileName); //xml書き込み putFishDB(iRodName, fishdb1_0_5); }