zoukankan      html  css  js  c++  java
  • SharpDevelop 属性服务

    本篇分析Core\Services的PropertyService类,该服务是用于所有需要属性持久的地方。
    因为涉及到属性持久化的存储位置,所以类中存在5个静态常量,很重要:
            readonly static string propertyFileName = "SharpDevelopProperties.xml";
            
    readonly static string propertyFileVersion = "1.1";
            
    readonly static string propertyXmlRootNodeName = "SharpDevelopProperties";

            
    readonly static string defaultPropertyDirectory = Application.StartupPath +
                                                              Path.DirectorySeparatorChar 
    + ".." +
                                                              Path.DirectorySeparatorChar 
    + "data" +
                                                              Path.DirectorySeparatorChar 
    + "options";

            
    readonly static string configDirectory = System.Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) +
                                                     Path.DirectorySeparatorChar 
    + ".ICSharpCode" +
                                                     Path.DirectorySeparatorChar 
    + "SharpDevelop" +
                                                     Path.DirectorySeparatorChar;
    持久化文件名称为SharpDevelopProperties.xml,该文件中,只读取Version=1.1以及根节点为"SharpDevelopProperties"的那一部分内容。
    至于
    defaultPropertyDirectory configDirectory ,则分别是默认属性和个性化属性,一般先在configDirectory下找,找到了直接加载或保存,找不到再去defaultPropertyDirectory目录下找。

    方法很多,分为两条线:
    1.在构造函数中加载属性 LoadProperties():
            void LoadProperties()
            {
                
    if (!Directory.Exists(configDirectory))
                {
                    Directory.CreateDirectory(configDirectory);
                }

                
    if (!LoadPropertiesFromStream(configDirectory + propertyFileName))
                {
                    Console.WriteLine(
    "Can't read global properties in user path, using default properties");
                    
    if (!LoadPropertiesFromStream(defaultPropertyDirectory + Path.DirectorySeparatorChar + propertyFileName))
                    {
                        
    throw new PropertyFileLoadException();
                    }
                }
            }
    LoadPropertiesFromStream()方法检测文件是否存在。

    2.在卸载服务UploadService时保存属性,SaveProperties():
            void SaveProperties()
            {
                WritePropertiesToFile(configDirectory 
    + propertyFileName);
            }

            
    void WritePropertiesToFile(string fileName)
            {
                XmlDocument doc 
    = new XmlDocument();
                doc.LoadXml(
    "<?xml version=\"1.0\"?>\n<" + propertyXmlRootNodeName + " fileversion = \"" + propertyFileVersion + "\" />");

                doc.DocumentElement.AppendChild(ToXmlElement(doc));

                FileUtilityService fileUtilityService 
    = (FileUtilityService)ServiceManager.Services.GetService(typeof(FileUtilityService));
                fileUtilityService.ObservedSave(
    new NamedFileOperationDelegate(doc.Save), fileName, FileErrorPolicy.ProvideAlternative);
            }
    这里使用了File服务的保证例程安全的文件保存方法——
    ObservedSave()



  • 相关阅读:
    Eclipse debug模式下使用16进制(Hex)查看变量值
    无线局域网中RADIUS协议原理与实现
    浏览器发送URL的编码特性
    跨域共享cookie和跨域共享session
    Nginx与Apache工作方式
    Http字段含义
    http中有关缓存相关的几个字段
    maven中用yuicompressor和closure-compiler对js、css文件进行压缩
    Mysql 忘记密码----修改Navicat的连接密码--以及--(加入安装Navicat时没设置密码)有时新建连接设置密码,连接不成功---的问题解决方法 密码忘记的解决
    RedisTemplate的各种操作(set、hash、list、string)
  • 原文地址:https://www.cnblogs.com/Jax/p/834223.html
Copyright © 2011-2022 走看看