2011-04-17 4 views
3

J'utilise un fichier XML ajouté dans mon projet avec les propriétés suivantes:WPF C fichier # XML ajouté en tant que ressource

Build Action : Resource 
Copy to output directory : Copy Always 

Ensuite, lorsque l'exécutable est en cours d'exécution, j'ai besoin les utilisateurs de pouvoir modifier le code XML (ajouter, supprimer et modifier des nœuds). C'est possible ? Ou dois-je changer l'action de construction en contenu?

Merci

edit: je l'ai supprimé et ajouté à nouveau en tant que contenu. Mais maintenant j'ai un autre problème: quand je l'ajoute au projet, il le cherche dans le répertoire racine de l'application (WpfApplication1 \ WpfApplication1 \ myfile.xml). Mais quand je lance l'application, la fonction chargée d'ajouter un nœud fonctionne correctement, mais elle enregistre le fichier dans le répertoire WpfApplication1 \ WpfApplication1 \ bin \ Debug \! D'où le "vrai" myfile.xml n'est pas mis à jour.

J'utilise:

XMLHosts.Load("myfile.xml"); 
XMLHosts.Save("myfile.xml"); 

et la source de données est déclarée comme:

<XmlDataProvider x:Key="MyfileData" Source="myfile.xml" XPath="Books/Book" /> 
+0

Cela semble fonctionner pour moi. Essayez de supprimer les répertoires de sortie existants et faites une reconstruction. Voir aussi http://stackoverflow.com/questions/495505/copy-always-to-output-directory-does-not-work –

Répondre

1

Si vous voulez le fichier XML à charger à partir du disque (et modifié), l'utilisation Build Action = Aucun et Copier = Copier toujours.

Un problème que vous rencontrerez est que si vous installez votre application dans "Program Files", vous ne pourrez pas éditer le fichier sous Windows Vista/7 à moins que vous ne couriez en tant qu'administrateur. - "Program Files" est uniquement modifiable pendant l'installation.

Une bonne pratique serait de copier xml à% APPDATA% \ Votre application (APPDATA = variable d'environnement, accès en utilisant System.Environment). Vous pouvez préformer cette copie pendant l'installation ou pendant la première exécution. % APPDATA% est destiné aux paramètres modifiables à l'exécution. Si vous marquez votre xml comme None + CopyAlways, vous pouvez le copier depuis le répertoire d'exécution vers% APPDATA% \ Votre application au démarrage de l'application, si elle n'existe pas encore à l'adresse de destination (si elle n'a pas encore été copiée).

Vous pouvez ensuite le charger à partir de% APPDATA% \ Votre application et lire les derniers paramètres.

Questions connexes