示例#1
0
        public bool ResetToDefault()
        {
            // Clear original data.
            Items.Clear();
            SettingsData <T> data = null;
            var assemblies        = new List <Assembly>();
            var exasm             = Assembly.GetExecutingAssembly();
            var enasm             = Assembly.GetEntryAssembly();

            assemblies.Add(exasm);
            if (exasm != enasm)
            {
                assemblies.Add(enasm);
            }
            var success = false;

            for (int a = 0; a < assemblies.Count; a++)
            {
                var assembly = assemblies[a];
                var names    = assembly.GetManifestResourceNames();
                // Get compressed resource name.
                var name = names.FirstOrDefault(x => x.EndsWith(_XmlFile.Name + ".gz"));
                if (string.IsNullOrEmpty(name))
                {
                    // Get uncompressed resource name.
                    name = names.FirstOrDefault(x => x.EndsWith(_XmlFile.Name));
                }
                // If internal preset was found.
                if (!string.IsNullOrEmpty(name))
                {
                    var    resource = assembly.GetManifestResourceStream(name);
                    var    sr       = new StreamReader(resource);
                    byte[] bytes;
                    using (var memstream = new MemoryStream())
                    {
                        sr.BaseStream.CopyTo(memstream);
                        bytes = memstream.ToArray();
                    }
                    if (name.EndsWith(".gz"))
                    {
                        bytes = SettingsHelper.Decompress(bytes);
                    }
                    var xml = Encoding.UTF8.GetString(bytes);
                    data    = Serializer.DeserializeFromXmlString <SettingsData <T> >(xml);
                    success = true;
                    break;
                }
            }
            LoadAndValidateData(data == null ? null : data.Items);
            return(success);
        }
示例#2
0
        public void LoadFrom(string fileName)
        {
            var settingsLoaded = false;
            var fi             = new FileInfo(fileName);

            // If configuration file exists then...
            if (fi.Exists)
            {
                SettingsData <T> data = null;
                // Try to read file until success.
                while (true)
                {
                    // Deserialize and load data.
                    lock (saveReadFileLock)
                    {
                        try
                        {
                            var bytes = File.ReadAllBytes(fi.FullName);
                            data = DeserializeData(bytes, fi.Name.EndsWith(".gz"));
                            break;
                        }
                        catch (Exception ex)
                        {
                            var backupFile = fi.FullName + ".bak";
                            var sb         = new StringBuilder();
                            sb.AppendFormat("{0} file has become corrupted.\r\n\r\n" +
                                            "Reason: " + ex.Message + "\r\n\r\n" +
                                            "Program must reset {0} file in order to continue.\r\n\r\n" +
                                            "   Click [Yes] to reset and continue.\r\n" +
                                            "   Click [No] if you wish to attempt manual repair.\r\n\r\n" +
                                            " File: {1}", fi.Name, fi.FullName);
                            sb.AppendLine();
                            sb.Append('-', 64);
                            sb.AppendLine();
                            sb.AppendLine(ex.ToString());
                            var caption = string.Format("Corrupt {0} of {1}", fi.Name, Application.ProductName);
                            //var form = new MessageBox();
                            //form.StartPosition = FormStartPosition.CenterParent;
                            var text   = sb.ToString();
                            var result = MessageBox.Show(text, caption, MessageBoxButtons.YesNo, MessageBoxIcon.Error);
                            if (result == DialogResult.Yes)
                            {
                                if (File.Exists(backupFile))
                                {
                                    File.Copy(backupFile, fi.FullName, true);
                                    fi.Refresh();
                                }
                                else
                                {
                                    File.Delete(fi.FullName);
                                    break;
                                }
                            }
                            else
                            {
                                // Avoid the inevitable crash by killing application first.
                                Process.GetCurrentProcess().Kill();
                                return;
                            }
                        }
                    }
                }
                // If data read was successful then...
                if (data != null)
                {
                    // Reorder data of order method exists.
                    var ao = ApplyOrder;
                    if (ao != null)
                    {
                        ao(data);
                    }
                    LoadAndValidateData(data.Items);
                    settingsLoaded = true;
                }
            }
            // If settings failed to load then...
            if (!settingsLoaded)
            {
                ResetToDefault();
                Save();
            }
        }