Comment puis-je regarder le fichier user.config et recharger les paramètres quand il change?
-
22-08-2019 - |
Question
J'ai une situation où je me présente plusieurs instances de mon application WPF. Je veux que les instances de partager le même fichier user.config. À l'heure actuelle, selon exemple écrit dans le fichier user.config dernières victoires. Je préfère pour toutes les instances pour regarder le fichier user.config et rechargent les paramètres à chaque fois une autre instance change. Le fichier user.config se trouve actuellement ici:
C: \ Documents and Settings \ nom d'utilisateur \ Local Settings \ Application Data \ nom de l'entreprise \ ExeName .exe_StrongName_ hachage \ 1.0.0.0
Par exemple, C: \ Documents and Settings \ usename \ Local Settings \ Application Data \ Société \ 5kAdCon.exe_StrongName_gxh0g12uyafipnfrslaggvy4vvk01fko \ 1.0.0.0
Est-il possible pour moi d'obtenir ce chemin complet (y compris le hachage) pour que je puisse ajouter un veilleur au fichier user.config?
Si oui, je veux recharger les paramètres lorsque les modifications de fichiers. Est-il aussi facile que d'appeler cette méthode?
Properties.Settings.Default.Reload();
La solution
Je l'ai trouvé. Le code suivant retourne le chemin vers le fichier user.config. Vous devez ajouter une référence à System.Configuration.dll
Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.PerUserRoamingAndLocal);
string path = config.FilePath;
Maintenant, je peux utiliser un FileSystemWatcher pour obtenir notifié des modifications de fichiers.
Autres conseils
Vous devez mettre en cache le fichier et mettre en œuvre CacheDependency de sorte que si une modification est apportée au fichier le fichier est rechargé dans le cache. J'utilise un fichier xml d'autorisation dans mon application qui est stockée dans le cache et rechargées si le fichier est changée. Voici le code:
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));
}
Mise en cache permettra également d'augmenter les performances de votre application.
vous pouvez utiliser le contrôle FileSystemWatcher?
il a un événement modifié, vous pouvez déclencher