this 오픈 소스 라이브러리에 문제 해결에 어려움이 있습니다 ...이 라이브러리를 사용하면 응용 프로그램 설정을 저장하는 XML 파일을 쉽게 만들 수 있습니다. 하지만 변경 사항을 저장하는 데 문제가 있습니다.C#에서 XML 스트림을 저장하면 다른 프로세스에서 사용 중임을 알 수 있습니다.
나는이 라이브러리를 사용하는 다른 응용 프로그램을 가지고 있으며 응용 프로그램 창의 크기가 조정될 때마다 라이브러리의 Save() 메서드를 호출하여 창 크기/위치를 XML 파일에 저장합니다.
대부분의 경우 잘 작동하며 모든 것이 저장됩니다. 한번은 그래도 파일이 다른 프로세스에서 사용되고 있다고 말하는 예외가 있습니다.
정말 Save() 메서드가 호출 될 때마다 변경 사항이 저장되는지 확인해야합니다.이 예외를 어떻게 든 처리하거나 발생하지 않도록해야합니다.
이 상황을 가장 잘 처리하기위한 제안 사항은 무엇입니까?
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();
}
나는 lock 문을 넣는 답을 받아 들였고 멋지다는 것을 알았지 만 코드에서 using 문을 여전히 사용하도록주의 할 것입니다. 예상 한대로 자원을 항상 정리할 수 있습니다. 예외가있는 경우 파일을 올바르게 닫지 않고 잠금이 도움이되지 않기 때문에 파일에 경합이있을 수 있습니다. –
나는 돌보아 주셔서 감사합니다. 그 질문에이 문제가 수정 되었기 때문에 그 대답을 받아 들였습니다.나는 더 이상 예외를 가지고 있지 않으며 다른 어떤 것도 갖지 못했습니다. (나는 미래에는 가지지 않을 것이라고 말하지 않습니다.) 그래서 문제는 해결되었습니다. 그래도, 당신의 추가 정보가 좋다. 그래서 내가 "도움이되는 대답"에 투표했다. :) –