コード例 #1
0
ファイル: SettingsUtil.cs プロジェクト: biorpg/RT.Util
        private static TSettings deserialize <TSettings>(string filename, SettingsSerializer serializer) where TSettings : SettingsBase, new()
        {
            return(Ut.WaitSharingVio(maximum: TimeSpan.FromSeconds(5), func: () =>
            {
                switch (serializer)
                {
                case SettingsSerializer.ClassifyXml:
                    return ClassifyXml.DeserializeFile <TSettings>(filename);

                case SettingsSerializer.ClassifyJson:
                    return ClassifyJson.DeserializeFile <TSettings>(filename);

                case SettingsSerializer.ClassifyBinary:
                    return ClassifyBinary.DeserializeFile <TSettings>(filename);

                case SettingsSerializer.DotNetBinary:
                    var bf = new BinaryFormatter();
                    using (var fs = File.Open(filename, FileMode.Open, FileAccess.Read, FileShare.Read))
                        return (TSettings)bf.Deserialize(fs);

                default:
                    throw new InternalErrorException("6843184");
                }
            }));
        }
コード例 #2
0
        /// <summary>Logs a message to the underlying stream.</summary>
        public override void Log(uint verbosity, LogType type, string message)
        {
            if (VerbosityLimit[type] < verbosity || Filename == null)
            {
                return;
            }
            if (message == null)
            {
                message = "<null>";
            }

            lock (this)
            {
                string fmtInfo, indent;
                GetFormattedStrings(out fmtInfo, out indent, verbosity, type);

                Ut.WaitSharingVio(maximum: SharingVioWait, action: () =>
                {
                    // Ensure that other processes can only read from the file, but not also write to it
                    using (var f = File.Open(Filename, FileMode.Append, FileAccess.Write, FileShare.Read))
                        using (var s = new StreamWriter(f))
                        {
                            s.Write(fmtInfo);
                            s.WriteLine(message);
                        }
                });
            }
        }
コード例 #3
0
ファイル: SettingsUtil.cs プロジェクト: biorpg/RT.Util
        internal static void serialize(object settings, Type settingsType, string filename, SettingsSerializer serializer)
        {
            var tempname = filename + ".~tmp";

            Ut.WaitSharingVio(() =>
            {
                switch (serializer)
                {
                case SettingsSerializer.ClassifyXml:
                    // SerializeToFile automatically creates the folder if necessary
                    ClassifyXml.SerializeToFile(settingsType, settings, tempname, format: ClassifyXmlFormat.Create("Settings"));
                    break;

                case SettingsSerializer.ClassifyJson:
                    // SerializeToFile automatically creates the folder if necessary
                    ClassifyJson.SerializeToFile(settingsType, settings, tempname);
                    break;

                case SettingsSerializer.ClassifyBinary:
                    // SerializeToFile automatically creates the folder if necessary
                    ClassifyBinary.SerializeToFile(settingsType, settings, tempname);
                    break;

                case SettingsSerializer.DotNetBinary:
                    PathUtil.CreatePathToFile(tempname);
                    var bf = new BinaryFormatter();
                    using (var fs = File.Open(tempname, FileMode.Create, FileAccess.Write, FileShare.Read))
                        bf.Serialize(fs, settings);
                    break;

                default:
                    throw new InternalErrorException("4968453");
                }
                File.Delete(filename);
                File.Move(tempname, filename);
            }, TimeSpan.FromSeconds(5));
        }