Ich habe this Open-Source-Bibliothek, die ich habe einige Probleme bei der Behebung eines Problems ... Diese Bibliothek ermöglicht auf einfache Weise eine XML-Datei zum Speichern von Anwendungseinstellungen erstellen. Aber ich habe ein Problem beim Speichern der Änderungen.Speichern XML-Stream in C# sagt, dass es von einem anderen Prozess verwendet wird
Ich habe eine andere Anwendung, wo ich diese Bibliothek verwende und jedes Mal, wenn das Anwendungsfenster die Größenänderung vorgenommen wird, rufe ich die Save() -Methode der Bibliothek auf, um die Fenstergröße/-position in der XML-Datei zu speichern.
Die meiste Zeit funktioniert es gut, alles ist gespeichert. Hin und wieder bekomme ich eine Ausnahme, dass die Datei von einem anderen Prozess verwendet wird.
Ich muss wirklich sicherstellen, dass Änderungen jedes Mal gespeichert werden, wenn die Save() -Methode aufgerufen wird, ich muss diese Ausnahme irgendwie behandeln oder verhindern, dass es passiert.
Was sind Ihre Vorschläge für den besten Umgang mit dieser Situation?
Der Code für die Save() Methode ist folgende:
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();
}
Ich sehe, dass Sie die Antwort angenommen haben, die Lock-Anweisung zu setzen, und das ist cool, aber ich würde Sie davor warnen, die using-Anweisung in Ihrem Code zu verwenden. Es wird sichergestellt, dass Sie Ihre Ressourcen immer wie erwartet bereinigen. Wenn Sie eine Ausnahme haben, schließen Sie die Datei nicht korrekt und haben möglicherweise weiterhin Konflikte in der Datei, da die Sperre nicht hilft. –
Ich benutze es auch, danke für die Pflege. Ich habe diese Antwort akzeptiert, weil sie das Problem in dieser Frage behoben hat.Ich habe nicht mehr die Ausnahme, die ich hatte und hatte nie eine andere (nicht sagen, ich werde es in Zukunft nicht haben), also ist das Problem behoben. Trotzdem, deine zusätzlichen Infos sind gut und deshalb habe ich für "hilfreiche Antworten" gestimmt :) –