簡體   English   中英

如何查看user.config文件並在更改后重新加載設置?

[英]How can I watch the user.config file and reload the settings when it changes?

我遇到了正在運行WPF應用程序的多個實例的情況。 我希望實例共享相同的user.config文件。 當前,無論哪個實例寫入到user.config文件,最后一次獲勝。 我希望所有實例都可以觀看user.config文件,並在其他實例對其進行更改時重新加載設置。 user.config文件當前位於此處:

C:\\ Documents and Settings \\ 用戶名 \\ Local Settings \\ Application Data \\ 公司名稱 \\ ExeName .exe_StrongName_ hash \\ 1.0.0.0

例如,C:\\ Documents and Settings \\ usename \\ Local Settings \\ Application Data \\ Company \\ 5kAdCon.exe_StrongName_gxh0g12uyafipnfrslaggvy4vvk01fko \\ 1.0.0.0

有沒有辦法讓我獲取此完整路徑(包括哈希),以便可以將文件監視程序添加到user.config文件?

如果是這樣,我想在文件更改時重新加載設置。 像調用此方法一樣容易嗎?

Properties.Settings.Default.Reload();

我找到了。 以下代碼將路徑返回到user.config文件。 您需要添加對System.Configuration.dll的引用

Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.PerUserRoamingAndLocal);
string path = config.FilePath;

現在,我可以使用FileSystemWatcher在文件更改時得到通知。

您應該對文件進行緩存並實現CacheDependency,這樣,如果對該文件進行了任何更改,則文件將被重新加載到緩存中。 我在我的應用程序中使用了一個權限xml文件,該文件存儲在緩存中,如果文件被更改,則會重新加載。 這是代碼:

protected void Page_Load(object sender, EventArgs e)
{
        XmlDocument permissionsDoc = null;

        if (Cache["Permissions"] == null)
        {
            string path = Server.MapPath("~/XML/Permissions.xml");
            permissionsDoc = new XmlDocument();
            permissionsDoc.Load(Server.MapPath("~/XML/Permissions.xml"));
            Cache.Add("Permissions", permissionsDoc,
                            new CacheDependency(Server.MapPath("~/XML/Permissions.xml")),
                           Cache.NoAbsoluteExpiration, Cache.NoSlidingExpiration,
                    CacheItemPriority.Default, new CacheItemRemovedCallback(ReloadPermissionsCallBack));
        }
        else
        {
            permissionsDoc = (XmlDocument)Cache["Permissions"];
        }
}

private void ReloadPermissionsCallBack(string key, object value, CacheItemRemovedReason reason)
    {
        XmlDocument doc = new XmlDocument();
        doc.Load(Server.MapPath("~/XML/Permissions.xml"));
        Cache.Insert("Permissions", doc ,
                            new CacheDependency(Server.MapPath("~/XML/Permissions.xml")),
                           Cache.NoAbsoluteExpiration, Cache.NoSlidingExpiration,
                    CacheItemPriority.Default, new CacheItemRemovedCallback(ReloadPermissionsCallBack));
    }

緩存還將提高您的應用程序性能。

您可以使用fileSystemWatcher控件嗎?

它具有可觸發的已修改事件

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM