从C#中读取值并写入XML文件

时间:2016-02-09 13:47:32

标签: c# xml

我想在做一些修改之后读取XML文件中的值,并且我想将它写入同一个文件 注意: - 它不应读取XML中的注释值

的Web.config: -

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


这是我的代码,

{{1}}

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

保存方法中获取例外 不确定我做错了什么,任何人都可以帮助我 提前致谢

2 个答案:

答案 0 :(得分:3)

你永远不会关闭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);
}

答案 1 :(得分:1)

在尝试写入文件之前,您需要丢弃阅读器:

doc.Save()

现在您仍然打开阅读器,因此阅读器正在访问该文件,当您致电XmlDocument时,using会尝试同时访问该文件。 Save()声明负责为您处理阅读器,因此当您致电using时,阅读器不再使用该文件。使用{{1}}语句来使用资源总是一个好主意,而不是手动关闭/处理资源。