J'ai une bibliothèque open-source this que j'ai du mal à corriger un problème ... Cette bibliothèque permet de créer facilement un fichier XML pour stocker les paramètres de l'application. Mais j'ai un problème en enregistrant les changements.Enregistrement de flux XML en C# dit qu'il est utilisé par un autre processus
J'ai une autre application où j'utilise cette bibliothèque et chaque fois que la fenêtre de l'application est redimensionnée, j'appelle la méthode Save() de la bibliothèque pour sauvegarder la taille/position de la fenêtre dans le fichier XML.
La plupart du temps cela fonctionne très bien, tout est sauvegardé. De temps en temps cependant, je reçois une exception disant que le fichier est utilisé par un autre processus.
J'ai vraiment besoin de m'assurer que les modifications sont sauvegardées à chaque fois que la méthode Save() est appelée, j'ai besoin de gérer cette exception ou de l'empêcher de se produire.
Que suggérez-vous pour mieux gérer cette situation?
Le code de la méthode Save() est la suivante:
public void Save() {
// Create a new XML file if there's no root element
if(xDocument.DocumentElement == null) {
xDocument = new XmlDocument();
xDocument.LoadXml("<?xml version=\"1.0\" encoding=\"utf-8\" ?>\n" +
"<" + XmlRootElement + ">\n</" + XmlRootElement + ">");
}
// OMITTED CODE WAS HERE (NOT IMPORTANT FOR THE PROBLEM)
// Create a new XML writer for the XML file
XmlWriter xWriter = XmlWriter.Create(XmlFilePath, new XmlWriterSettings() {
Indent = true,
IndentChars = "\t"
});
// Sort the XML file using the XSL sylesheet and save it
xslTransform.Transform(xDocument, xWriter);
// Clear the buffer and close the XML writer stream
xWriter.Flush();
xWriter.Close();
}
Je vois que vous avez accepté la réponse de mettre l'instruction lock dans et c'est cool, mais je vous conseille d'utiliser toujours l'instruction using dans votre code. Cela garantira que vous nettoyez toujours vos ressources comme prévu. Si vous avez une exception, vous ne fermerez pas le fichier correctement et pourrez toujours avoir un conflit sur le fichier car le verrou n'aidera pas. –
Je m'en sers aussi, merci de votre attention. J'ai accepté cette réponse parce qu'elle a réglé le problème sur cette question.Je n'ai plus l'exception que j'avais et je n'en ai jamais eu de différent (ne disant pas que je ne l'aurai plus dans le futur), donc le problème est résolu. Pourtant, votre information supplémentaire est bonne et c'est pourquoi j'ai voté pour "réponse utile" :) –