sss

[XmlRoot]
    public class HCSPConfig
    {
        private static string configFileName = "HCSP.Terminal.Config.config";
        private static HCSPConfig configInstance;
        private static string backupDir = Path.Combine(Application.StartupPath, "Backup");
        private static string backupFileFullName = string.Format("{0}/{1}", HCSPConfig.backupDir, HCSPConfig.configFileName);

        public bool AutoLogin { get; set; }

        #region Xml Element
        [XmlElement]
        public DateTime LastIssuesDate { get; set; }

        [XmlElement]
        public string LastLoginUser { get; set; }

        [XmlElement]
        public string LastLoginCustomer { get; set; }

        [XmlElement]
        public string LastLoginPassword { get; set; }

        [XmlElement]
        public bool RemeberPassword { get; set; }

        [XmlElement]
        public string DIYWorkspace { get; set; }

        [XmlElement]
        public string DIYSqlite_url { get; set; }

        [XmlElement]
        public string Workspace { get; set; }

        [XmlElement]
        public double DiskSpaceWarning { get; set; }

        [XmlElement]
        public int AutoDeleteDays { get; set; }

        [XmlElement]
        public bool Inited { get; set; }

        [XmlElement]
        public int DIYAutoSaveSecond { get; set; }

        [XmlElement]
        public int DIYIFPort { get; set; }
        #endregion

        /// <summary>
        /// 获取配置
        /// </summary>
        public static HCSPConfig GetConfig()
        {
            if (HCSPConfig.configInstance == null)
            {
                string fileFullName = Path.Combine(Application.StartupPath, HCSPConfig.configFileName);
                if (!File.Exists(fileFullName))
                {
                    HCSPConfig.SaveConfig(null);
                }

                var serializer = new XmlSerializer(typeof(HCSPConfig));
                FileStream fileStream = null;
                try
                {
                    fileStream = File.Open(fileFullName, FileMode.Open);
                    HCSPConfig.configInstance = (HCSPConfig)serializer.Deserialize(fileStream);
                }
                catch (Exception)
                {
                    fileStream.Close();

                    //还原配置文件,
                    HCSPConfig.ReductionConfigFile();
                    //重新加载,
                    fileStream = File.Open(fileFullName, FileMode.Open);
                    HCSPConfig.configInstance = (HCSPConfig)serializer.Deserialize(fileStream);
                }
                finally
                {
                    HCSPConfig.TryCloseFile(fileStream);

                    if (HCSPConfig.configInstance.DIYIFPort == 0)
                    {
                        HCSPConfig.configInstance.DIYIFPort = 5031;
                    }
                    if (HCSPConfig.configInstance.DIYAutoSaveSecond == 0)
                    {
                        HCSPConfig.configInstance.DIYAutoSaveSecond = 30;
                    }
                    HCSPConfig.SaveConfig(HCSPConfig.configInstance);
                }
            }
            return HCSPConfig.configInstance;
        }

        /// <summary>
        /// 保存配置
        /// </summary>
        /// <param name="config">如果保存的配置为NULL,则新建一个配置</param>
        /// <param name="copyFromOldDir">是否从旧目录拷贝所有文件及文件夹到新目录</param>
        public static void SaveConfig(HCSPConfig config, bool copyFromOldDir = true, bool deleteOldDir = false)
        {
            if (config == null)
            {
                config = new HCSPConfig
                {
                    DIYIFPort = 5031,
                    DIYAutoSaveSecond = 30,
                    AutoDeleteDays = 30,
                    DiskSpaceWarning = 5,
                    DIYSqlite_url = @"/DB/data.db",
                    DIYWorkspace = Path.Combine(Application.StartupPath, "WorkSpace", "DiyWorkSpace").Replace("\\", @"/"),
                    Inited = false,
                    Workspace = Path.Combine(Application.StartupPath, "WorkSpace", "BussinessWorkSpace"),
                    LastIssuesDate = DateTime.Now.AddMonths(-1),
                };

                var dbDir = Path.Combine(Application.StartupPath, "WorkSpace", "DiyWorkSpace", "DB");
                HCSPConfig.TryCreateDirectory(dbDir);
            }
            else
            {
                config.DIYWorkspace = config.DIYWorkspace.Replace(@"\", @"/");
                config.DIYSqlite_url = config.DIYSqlite_url.Replace(@"\", @"/");
            }

            HCSPConfig.TryDeleteFile(HCSPConfig.configFileName);

            try
            {
                var serializer = new XmlSerializer(typeof(HCSPConfig));
                var fileStream = File.Create(HCSPConfig.configFileName);
                serializer.Serialize(fileStream, config);
                HCSPConfig.TryCloseFile(fileStream);
                
                //备份配置文件,
                HCSPConfig.BackupConfigFile();
            }
            catch (Exception)
            {
            }
        }

        #region Try
        private static void TryCloseFile(FileStream fileStream)
        {
            if (fileStream != null)
            {
                fileStream.Flush();
                fileStream.Close();
                fileStream.Dispose();
            }
        }

        private static void TryCreateDirectory(string dir)
        {
            if (!Directory.Exists(dir))
            {
                Directory.CreateDirectory(dir);
            }
        }

        private static void TryDeleteFile(string fileName)
        {
            if (File.Exists(fileName))
            {
                File.Delete(fileName);
            }
        }

        private static void TryCopyFile(string sourceFileName, string destFileName)
        {
            if (File.Exists(sourceFileName))
            {
                File.Copy(sourceFileName, destFileName, true);
            }
        }
        #endregion

        private static void BackupConfigFile()
        {
            HCSPConfig.TryCreateDirectory(HCSPConfig.backupDir);

            HCSPConfig.TryCopyFile(HCSPConfig.configFileName, HCSPConfig.backupFileFullName);
        }

        private static void ReductionConfigFile()
        {
            if (File.Exists(HCSPConfig.backupFileFullName))
            {
                File.Copy(HCSPConfig.backupFileFullName, HCSPConfig.configFileName, true);
            }
            else
            {
                //不存在备份文件,直接初始化一个,
                HCSPConfig.SaveConfig(null);
            }
        }
    }

 

你可能感兴趣的:(sss)