XmlDocument Save保持文件打开

Bel*_*iez 10 c# xml xmldocument

我有一个简单的c#函数,它创建一个基本的XML文件并保存:

private void CreateXMlFile(string Filename, string Name, string Company)
        {
            XmlDocument doc = new XmlDocument();
            XmlNode docNode = doc.CreateXmlDeclaration("1.0", "UTF-8", null);
            doc.AppendChild(docNode);

            XmlNode licenseNode = doc.CreateElement("license");
            doc.AppendChild(licenseNode);

            XmlNode node = doc.CreateElement("Name");
            node.AppendChild(doc.CreateTextNode(Name));
            licenseNode.AppendChild(node);

            node = doc.CreateElement("Company");
            node.AppendChild(doc.CreateTextNode(Company));
            licenseNode.AppendChild(node);


            doc.Save(Filename);
        }
Run Code Online (Sandbox Code Playgroud)

当我尝试编辑或删除文件时,我总是会收到以下错误:

该进程无法访问该文件,因为该文件正由另一个进程使用.

XmlDocument没有任何内置的dispose或close例程,并想知道如何在以后编辑或删除它之前强制关闭文件.

我试图使用StreamWriter保存文件:

StreamWriter outStream = System.IO.File.CreateText(outfile);
            outStream.Write(data);
            outStream.Close();
Run Code Online (Sandbox Code Playgroud)

但这并没有对同样的错误产生影响.

你的建议被大大接受了.

谢谢

Ash*_*okD 6

将Stream发送到XmlDocument的Save方法而不是文件名。

    private static void Main(string[] args)
    {
        CreateXMlFile("c:\\test.xml", "testName", "testCompany");
    }

    private static void CreateXMlFile(string Filename, string Name, string Company)
    {
        XmlDocument doc = new XmlDocument();
        XmlNode docNode = doc.CreateXmlDeclaration("1.0", "UTF-8", null);
        doc.AppendChild(docNode);

        XmlNode licenseNode = doc.CreateElement("license");
        doc.AppendChild(licenseNode);

        XmlNode node = doc.CreateElement("Name");
        node.AppendChild(doc.CreateTextNode(Name));
        licenseNode.AppendChild(node);

        node = doc.CreateElement("Company");
        node.AppendChild(doc.CreateTextNode(Company));
        licenseNode.AppendChild(node);
        StreamWriter outStream = System.IO.File.CreateText(Filename);

        doc.Save(outStream);
        outStream.Close();
    }
Run Code Online (Sandbox Code Playgroud)

我尝试执行上述代码,但最终效果良好。


Blu*_*ueM 2

你的代码没问题。我在我的机器上测试了它,Save()之后没有留下锁。

尝试使用Unlocker(http://www.softpedia.com/get/System/System-Miscellaneous/Unlocker.shtml)来检查您是否真的是持有锁的人。

您使用哪个 .NET 框架?还有一份报告(http://bytes.com/topic/net/answers/467028-xmldocument-save-does-not-close-file-properly)也无法重现。