C#中如何重写XML文件

wulin900515 2012-03-23 02:13:14
我使用XmlDocument xmldoc=new XmlDocument();创建了一个XmlDocument对象

然后在添加了元素和text后,点击保存按钮使用xmldoc.Save(file);保存文件

文件的内容都是通过结构体数组一次性写入,当我更改结构体数组中的数据,再保存数据时他会在原文件尾继续全部重写这些数据。我想把之前的文件已有的数据清空,然后再写入数据,不知道有什么好的方法

请注意:这里的要求是重写XML文件(先清空以前的全部数据,再写入新数据)
...全文
372 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
wulin900515 2012-03-23
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 luoyetingfeng 的回复:]
如果有多个地方会对同一文件操作,可考虑加锁,这样就可避免删除不掉的问题!
[/Quote]

如何加锁?
luoyetingfeng 2012-03-23
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 wulin900515 的回复:]
引用 8 楼 dalmeeme 的回复:

引用 7 楼 wulin900515 的回复:
引用 5 楼 dalmeeme 的回复:

删除xml文件:File.Delete(@"路径");



删除文件的方法不行啊,文件删不掉

路径不对吧,或者是该文件正在使用,也会删不掉。


对了 你说的正在使用,可能是的因为我的程序还在运行呢。估计是没有方法删除的
[/Quote]
如果有多个地方会对同一文件操作,可考虑加锁,这样就可避免删除不掉的问题!
luoyetingfeng 2012-03-23
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 wulin900515 的回复:]
引用 9 楼 luoyetingfeng 的回复:

xmlDoc.Save(xmlFileName); 会把新的DOM内容保存到文件!


是的 ,有好的方法吗
[/Quote]
使用File.Delete(filePath)先删除文件然后再重写,其实没必要,
xmlDoc.Save完全可以做到!
zhujuntao091 2012-03-23
  • 打赏
  • 举报
回复
删除根元素下的所有节点,将新添加的节点追加到根元素下,调用Save方法
dalmeeme 2012-03-23
  • 打赏
  • 举报
回复
File.Delete(getfilename); 这句就是最一般的删除方法啊。你看下是不是别的地方有问题。
wulin900515 2012-03-23
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 dalmeeme 的回复:]

引用 7 楼 wulin900515 的回复:
引用 5 楼 dalmeeme 的回复:

删除xml文件:File.Delete(@"路径");



删除文件的方法不行啊,文件删不掉

路径不对吧,或者是该文件正在使用,也会删不掉。
[/Quote]

对了 你说的正在使用,可能是的因为我的程序还在运行呢。估计是没有方法删除的
wulin900515 2012-03-23
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 luoyetingfeng 的回复:]

xmlDoc.Save(xmlFileName); 会把新的DOM内容保存到文件!
[/Quote]

是的 ,有好的方法吗
wulin900515 2012-03-23
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 dalmeeme 的回复:]

引用 7 楼 wulin900515 的回复:
引用 5 楼 dalmeeme 的回复:

删除xml文件:File.Delete(@"路径");



删除文件的方法不行啊,文件删不掉

路径不对吧,或者是该文件正在使用,也会删不掉。
[/Quote]

private void SaveAsToolStripMenuItem_Click(object sender, EventArgs e)
{
SaveFileDialog save = new SaveFileDialog();
save.Filter = "XML文件|*.xml";
save.InitialDirectory = Directory.GetCurrentDirectory();
save.RestoreDirectory = true;
if (save.ShowDialog() == DialogResult.OK)
{
getfilename = save.FileName; //getfilename 得到的路径是对的,这个我调试的时候可以看见
savefile = true;
writeXml();
xmldoc.Save(getfilename);
}
}

File.Delete(getfilename); //这个就是你说的方法 不行的

luoyetingfeng 2012-03-23
  • 打赏
  • 举报
回复
xmlDoc.Save(xmlFileName); 会把新的DOM内容保存到文件!
dalmeeme 2012-03-23
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 wulin900515 的回复:]
引用 5 楼 dalmeeme 的回复:

删除xml文件:File.Delete(@"路径");



删除文件的方法不行啊,文件删不掉
[/Quote]
路径不对吧,或者是该文件正在使用,也会删不掉。
wulin900515 2012-03-23
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 dalmeeme 的回复:]

删除xml文件:File.Delete(@"路径");

[/Quote]

删除文件的方法不行啊,文件删不掉
porschev 2012-03-23
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 wulin900515 的回复:]

引用 3 楼 dalmeeme 的回复:

根元素貌似没法删除,删除根元素会报错。

另一种思路是:重新生成一个xml文档,先删除原xml文件,再以原文件名Save。


我是开始点保存按钮时,输入文件名后保存文件。按你说的如何重新一个xml文档呢,再者我好想还没有找到删除XMl文件的方法,该如何删除呢?
[/Quote]



#region XML文档节点或属性的删除
/// <summary>
/// 删除匹配XPath表达式的第一个节点(节点中的子元素同时会被删除)
/// </summary>
/// <param name="xmlFileName">XML文档完全文件名(包含物理路径)</param>
/// <param name="xpath">要匹配的XPath表达式(例如:"//节点名//子节点名</param>
/// <returns>成功返回true,失败返回false</returns>
public static bool DeleteXmlNodeByXPath(string xmlFileName, string xpath)
{
bool isSuccess = false;
XmlDocument xmlDoc = new XmlDocument();
try
{
xmlDoc.Load(xmlFileName); //加载XML文档
XmlNode xmlNode = xmlDoc.SelectSingleNode(xpath);
if (xmlNode != null)
{
//删除节点
xmlNode.ParentNode.RemoveChild(xmlNode);
}
xmlDoc.Save(xmlFileName); //保存到XML文档
isSuccess = true;
}
catch (Exception ex)
{
throw ex; //这里可以定义你自己的异常处理
}
return isSuccess;
}




这是一个XMLHelper。。。
dalmeeme 2012-03-23
  • 打赏
  • 举报
回复
删除xml文件:File.Delete(@"路径");

http://blog.csdn.net/amandag/article/details/2623322
wulin900515 2012-03-23
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 dalmeeme 的回复:]

根元素貌似没法删除,删除根元素会报错。

另一种思路是:重新生成一个xml文档,先删除原xml文件,再以原文件名Save。
[/Quote]

我是开始点保存按钮时,输入文件名后保存文件。按你说的如何重新一个xml文档呢,再者我好想还没有找到删除XMl文件的方法,该如何删除呢?
dalmeeme 2012-03-23
  • 打赏
  • 举报
回复
根元素貌似没法删除,删除根元素会报错。

另一种思路是:重新生成一个xml文档,先删除原xml文件,再以原文件名Save。
bdmh 2012-03-23
  • 打赏
  • 举报
回复
重新XmlDocument xmldoc=new XmlDocument();写入数据,然后保存,覆盖掉原来的??
dalmeeme 2012-03-23
  • 打赏
  • 举报
回复
你可能是Append进数据的吧,可以这样:
xmlDoc.DocumentElement.InnerXml = "";
这样除根元素外,所有其他数据都清空。
然后再Append到根元素下。

111,126

社区成员

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

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

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