Comment puis-je regarder le fichier user.config et recharger les paramètres quand il change?

StackOverflow https://stackoverflow.com/questions/884260

  •  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();
Était-ce utile?

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

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top