C# XmlDocument.Save()方法

GisXiaoluo 2012-03-27 11:30:59
在用xmldocument类时,我要先从中读取一个数据,然后再向其添加一个节点,在调用XmlDocument.Save()方法时就会出现该文件“由另一进程使用,因此该进程无法访问该文件。”的错误,
怎么样才能避免呢?是不是要用到多线程?
...全文
1012 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
孟子E章 2012-03-27
  • 打赏
  • 举报
回复
读和写,Load一次就可以了。XmlDocument是内存中的对象,直接可以使用
liuxin0121 2012-03-27
  • 打赏
  • 举报
回复
XmlDocument.Load(string)是托管方法,本身是不需要释放的安全方法,但是由于你多线程可能同时对文件本身访问,所以要加上一些处理
在你document处理完了之后,释放掉资源就可以了
[code=c#]
document.RemoveAll();
document = null;
[/code]
GisXiaoluo 2012-03-27
  • 打赏
  • 举报
回复
不是代码的问题 如果我不先读的话,直接去添加节点,document.save()方法就没问题,
GisXiaoluo 2012-03-27
  • 打赏
  • 举报
回复
好的
public int ComputeTimeSpan()
{
XmlDocument document = new XmlDocument();
XmlReaderSettings readingSettings = new XmlReaderSettings();
readingSettings.IgnoreComments = true;
XmlReader xmlReader = XmlReader.Create(fileName, readingSettings);
document.Load(xmlReader);
XmlNodeList nodeList = document.SelectSingleNo("LastCopyTime").ChildNodes;
if (nodeList.Count == 0)
return miniute;
string lastDate = nodeList[0].InnerText;
DateTime oldDate = DateTime.Parse(lastDate);
DateTime nowDate = DateTime.Now;
TimeSpan span = nowDate - oldDate;

miniute = span.Minutes;
System.Runtime.InteropServices.Marshal.ReleaseComObject(document);
return miniute;
}
public void WriteCopyDate()
{

XmlDocument document = new XmlDocument();
document.Load(fileName);
XmlNode node = document.SelectSingleNode("LastCopyTime");
string date = DateTime.Now.ToString("f");
if (node.FirstChild != null)
{
node.RemoveChild(node.FirstChild);
}
XmlElement element = document.CreateElement("LastTime");
element.InnerText = date;
node.AppendChild(element);
document.Save(fileName);
}
liuxin0121 2012-03-27
  • 打赏
  • 举报
回复
把你这段读文档一直到save的代码发上来,我看看
GisXiaoluo 2012-03-27
  • 打赏
  • 举报
回复
但是该怎么释放呢,求指教
liuxin0121 2012-03-27
  • 打赏
  • 举报
回复
读完了数据没释放吧,应该是这个进程还在占用中,释放了就好了
GisXiaoluo 2012-03-27
  • 打赏
  • 举报
回复
找到原因了,
XmlReader xmlReader = XmlReader.Create(fileName, readingSettings);
document.Load(xmlReader);
完成后 应该调用 xmlReader.close()方法,就不会出现 问题了
谢谢大家

110,537

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧