C# xmldocumentsave使文件保持打开状态

C# xmldocumentsave使文件保持打开状态,c#,xml,xmldocument,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);

我有一个简单的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);
        }
当我试图编辑或删除文件时,总是会出现以下错误:

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

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

我已尝试使用StreamWriter保存文件:

StreamWriter outStream = System.IO.File.CreateText(outfile);
            outStream.Write(data);
            outStream.Close();
但这并没有造成同样的错误

我非常接受你的建议


谢谢

您的代码很好。我在我的机器上测试了它,保存()后没有锁了

尝试使用解锁器(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)也不可复制。

将流发送到XmlDocument的保存方法,而不是文件名

    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();
    }

我试着执行上面的代码,但在我结束时它运行良好。

您是否尝试使用流写入的实例来编写它,而不是传递要保存的文件名?我也有同样的问题,但我的代码是先加载XML(如果存在的话)。需要关闭
XmlReader
对象才能释放文件上的锁。我尝试了此操作,当我要删除文件时,出现了相同的错误。是否可以尝试更改文件位置?是否也尝试了新位置,并且相同。我还禁用了Livedrive(在线备份),以防干扰。这一问题困扰了我好几天,因为XMLDocument.Save()在调试模式下似乎可以正常刷新,但在发行版中却不能。使用流解决了这个问题,谢谢。你最终解决了吗?我目前也有同样的问题。它被visual studio vshost.exe锁定。我刚编译到.NET3.5,还有同样的问题。你能用这个方法创建一个空白的项目吗?这个方法通过点击按钮来调用,点击后检查文件是否被锁定?