public static void SaveUsers() { if (File.Exists(usersFile)) { if (m_users == null || (lastSavedUsers != null && lastSavedUsers.Equals(m_users))) { return; } Debug.Log("Сохраняю список пользователей..."); string backupFile = backupDir + "/" + usersFile + "."; Directory.CreateDirectory(backupDir); List <string> files = new List <string>(Directory.GetFiles(backupDir, "*.xml.*")); if (files.Count > 9) { backupFile += "9"; if (File.Exists(backupFile)) { File.Delete(backupFile); } } else { string last = ""; if (files.Count > 0) { files.Sort((a, b) => a.CompareTo(b)); files.Reverse(); last = files[0].Remove(0, files[0].LastIndexOf(".") + 1); } if (!int.TryParse(last, out int lastInt)) { backupFile += "0"; } else { backupFile += lastInt + 1; } } File.Move(usersFile, backupFile); } XmlSerializer formatter = new XmlSerializer(typeof(UsersObj)); using (FileStream fs = new FileStream(usersFile, FileMode.OpenOrCreate)) { formatter.Serialize(fs, m_users); } using (FileStream fs = new FileStream(usersFile, FileMode.OpenOrCreate)) { lastSavedUsers = (UsersObj)formatter.Deserialize(fs); } }
public static bool LoadUsers(byte id = 0) { if (File.Exists(usersFile)) { try { using (FileStream fs = new FileStream(usersFile, FileMode.Open)) { XmlSerializer formatter = new XmlSerializer(typeof(UsersObj)); m_users = (UsersObj)formatter.Deserialize(fs); } using (FileStream fs = new FileStream(usersFile, FileMode.Open)) { XmlSerializer formatter = new XmlSerializer(typeof(UsersObj)); lastSavedUsers = (UsersObj)formatter.Deserialize(fs); } return(true); } catch (Exception e) { int i = 0; string errFile = usersFile + ".err"; while (File.Exists(errFile + i)) { if (++i > 9) { break; } } File.Move(usersFile, errFile + i); Debug.LogException(e); return(LoadBackup(id)); } } else { if (LoadBackup(id)) { return(true); } else { m_users = new UsersObj(); SaveUsers(); } return(false); } }
public bool Equals(UsersObj obj) { bool ret = users.Count == obj.users.Count; ret &= lastUMid == obj.lastUMid; ret &= lastSignalNumer == obj.lastSignalNumer; if (ret) { foreach (int user in obj.users) { ret &= users.Contains(user); if (!ret) { break; } } } return(ret); }