최근에 C# 프로그램에서 XML 문서를 사용하는 응용 프로그램을 개발하기 시작했습니다. 모든 것이 잘 시작되었지만 코드를 편집 할 때 XML이 삭제되거나 손상된 경우를 대비해 프로그램에 조금 더 많은 기능을 추가 했으므로 프로그램이 제대로 작동하지 않게되었습니다. 데이터를 제출하고 XML로 전송할 때다른 프로세스에서 사용중인 XML 파일
다음 코드를 사용 :
: 응용 프로그램에서 "완료"를 클릭하려고하면
private void doneCreate_Click(object sender, EventArgs e)
{
//Initialize new XMLDocument class.
XmlDocument XmlDoc = new XmlDocument();
//See if the card data file is there, if not, create it.
if (File.Exists(xmlPath) == false)
{
using (FileStream createFile = File.Create(xmlPath))
{
Byte[] FileData = new UTF8Encoding(true).GetBytes(toBase64("<studycards></studycards>"));
// Add some information to the file.
createFile.Write(FileData, 0, FileData.Length);
createFile.Close();
}
XMLData = "<studycards></studycards>";
}
else
{
XMLData = readXML();
if (XMLData == "")
{
XMLData = "<studycards></studycards>";
}
else
{
XMLData = fromBase64(XMLData);
}
}
XmlDoc.LoadXml(XMLData);
XmlElement Group = XmlDoc.CreateElement("Group", null);
XmlAttribute Group_Attr = XmlDoc.CreateAttribute("Name");
Group_Attr.Value = groupName.Text;
Group.Attributes.Append(Group_Attr);
foreach (string[] Card in CardData)
{
try
{
FrontData = Card[0].ToString();
BackData = Card[1].ToString();
NewCard = XmlDoc.CreateElement("Card");
FrontElement = XmlDoc.CreateElement("Front");
FrontElement.InnerText = FrontData;
BackElement = XmlDoc.CreateElement("Back");
BackElement.InnerText = BackData;
NewCard.AppendChild(FrontElement);
NewCard.AppendChild(BackElement);
Group.AppendChild(NewCard);
}
catch
{
break;
}
}
XmlDoc.DocumentElement.AppendChild(Group);
XmlTextWriter write = new XmlTextWriter(xmlPath, null);
write.Formatting = Formatting.Indented;
XmlDoc.Save(write);
}
, 나는 다음과 같은 예외되게 해요 프로세스가 다른 프로세스에서 사용 중이기 때문에 'C : \ Users \ Toshiba \ documents \ visual studio 2010 \ Projects \ StudyCards \ StudyCards \ bin \ Debug \ Resources \ card_data.xml'파일에 액세스 할 수 없습니다.
모든 솔루션?
IDisposable을 구현하는 개체 주변에서 flush, close, dispose를 적절하게 사용하고 using 문을 사용해야합니다. –
하나의 제안은 try/catch 블록을 제거하는 것입니다. 예외를 무시하는 것은 결코 좋은 일이 아닙니다. 또한, 당신은'new XmlTextReader()'또는'new XmlTextWriter()'를 사용하지 말아야한다. NET 2.0부터는 사용되지 않습니다. 대신'XmlReader.Create()'또는'XmlWriter.Create()'를 사용하십시오. –