2009-05-19 93 views
3

我有一種情況,我正在運行我的WPF應用程序的多個實例。我希望實例共享相同的user.config文件。目前,無論哪個實例寫入user.config文件最後都會勝出。我更喜歡所有的實例觀看user.config文件,並重新加載設置,每當另一個實例改變它。目前user.config文件位於:如何查看user.config文件並在其更改時重新加載設置?

C:\的Documents and Settings \用戶名 \本地設置\應用數據\ 公司名稱 \ EXENAME .exe_StrongName_ 哈希 \ 1.0.0.0

例如,C:\ Documents和Settings \ USENAME \本地設置\應用數據\企業\ 5kAdCon.exe_StrongName_gxh0g12uyafipnfrslaggvy4vvk01fko \ 1.0.0.0

有沒有辦法讓我得到這個充滿拍h(包括散列),所以我可以添加一個文件觀察者到user.config文件?

如果是這樣,我想在文件更改時重新加載設置。調用這個方法是否簡單?

Properties.Settings.Default.Reload(); 
+0

如果一個實例的未保存的設置被另一個實例覆蓋,你還好嗎?在我看來,用戶可能不希望所有設置都重置。至少爲此提出一個對話。 – 2009-05-19 21:01:49

+0

大部分,是的。我試圖避免它最後關閉哪個實例。現在關閉最後一個實例的設置是保存的設置。 – 2009-05-19 21:11:27

回答

6

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

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

現在我可以用一個FileSystemWatcher得到通知的文件發生更改時。

0

你可以使用fileSystemWatcher控件嗎?

它有一個修改的事件可以觸發

+2

是的,但我不知道如何獲取我需要觀看的文件的路徑。路徑如下所示: C:\ Documents and Settings \ usename \ Local Settings \ Application Data \ Company \ 5kAdCon.exe_StrongName_gxh0g12uyafipnfrslaggvy4vvk01fko \ 1.0.0.0。 有沒有辦法構建這條路? – 2009-05-19 21:09:14

1

你應該緩存中的文件,因此,如果有任何變化的文件被在緩存重新加載的文件進行實施的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)); 
    } 

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

相關問題