在 C# 中读取值和写入 XML 文件

本文关键字:XML 文件 读取 | 更新日期: 2023-09-27 18:33:47

我想在进行一些修改后从XML文件中读取值,我想将其写入同一文件。
注意:- 它不应该从XML
中读取注释值

网络配置:-

<add key="InputDataFileName" value="InputData.xml" /> 


这是我的代码,

string inputxmlPath = AppDomain.CurrentDomain.BaseDirectory + ConfigurationManager.AppSettings["InputDataFileName"];
            XmlReaderSettings readerSettings = new XmlReaderSettings();
            readerSettings.IgnoreComments = true;
            XmlReader reader = XmlReader.Create(inputxmlPath, readerSettings);
            XmlDocument doc = new XmlDocument();
            doc.Load(reader);
            var ParentNode = doc.SelectSingleNode("//TestData"); //This is the root Node
            if (ParentNode.ChildNodes.Count > 0)
            {
                foreach (XmlNode child in ParentNode)
                {
                    string elementName = child.LocalName;
                    switch (elementName)
                    {
                        case "URL":
                            for (int i = 0; i < child.ChildNodes.Count; i++)
                            {
                                XmlNode node = child.ChildNodes[i].FirstChild;
                                node.InnerText = CMEURL;
                            }
                            break;
                        case "LoadBalanceList":
                            for (int i = 0; i < child.ChildNodes.Count; i++)
                            {
                                XmlNode node = child.ChildNodes[i].FirstChild;
                                node.InnerText = CMEURL;
                            }
                            break;
                        case "Activity":
                            for (int i = 0; i < child.ChildNodes.Count; i++)
                            {
                                XmlNode node = child.ChildNodes[i].FirstChild;
                                node.InnerText = CMEURL;
                            }
                            break;
                        default:
                            break;
                    }
                }
            }
            doc.Save(inputxmlPath); //Getting an exception here

异常:用户代码未处理 IOException进程无法访问文件"C:''Users''Desktop''Patching ''source''Automation''InputData.xml",因为它正被另一个进程使用。

Save 方法
中获取异常不知道我做错了什么,谁能帮助我
提前感谢

在 C# 中读取值和写入 XML 文件

你永远不会关闭XmlReader,所以它仍然有一个打开的文件句柄用于读取 - 这意味着你不能写入同一个文件。你应该把它放在一个using语句中:

var doc = new XmlDocument();
var settings = new XmlReaderSettings { IgnoreComments = true };
using (var reader = XmlReader.Create(inputXmlPath, settings))
{
    doc.Load(reader);
}

不过,我个人会使用 XDocument 而不是XmlDocument

XDocument doc;
var settings = new XmlReaderSettings { IgnoreComments = true };
using (var reader = XmlReader.Create(inputxmlPath, settings))
{
    doc = XDocument.Load(reader);
}

在尝试写入文件之前,您需要释放读取器:

XmlDocument doc = new XmlDocument();
using(var reader = XmlReader.Create(inputxmlPath, readerSettings))            
   doc.Load(reader);

现在,您仍然打开了读取器,因此读取器正在访问文件,并且当您调用doc.Save()时,XmlDocument会同时尝试访问该文件。using语句负责为您处置读取器,因此当您调用Save()时,读取器不再使用该文件。最好将资源与 using 语句一起使用,而不是手动关闭/释放资源。