XmlDocument的保存保持文件打开
问题描述:
我有一个创建一个基本的XML文件,并保存一个简单的C#功能:XmlDocument的保存保持文件打开
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);
}
当我尝试编辑或删除的文件我总是得到以下错误:
The process cannot access the file because it is being used by another process.
XmlDocument没有任何内置的配置或关闭例程,并想知道如何在稍后编辑或删除它之前强制关闭文件。
我曾尝试使用的StreamWriter来保存文件:
StreamWriter outStream = System.IO.File.CreateText(outfile);
outStream.Write(data);
outStream.Close();
但这didnt使具有相同错误的差异。
您的建议很受欢迎。
谢谢
答
你的代码没问题。我在我的机器上进行了测试,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)。
答
发送流到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();
}
我试着执行上面的代码,它在我的最后工作正常。
您是否试图用流写入的实例编写而不是传递文件名来保存? – Steve 2012-02-17 11:01:12
我有同样的问题,但我的代码首先加载XML,如果它存在。在释放文件锁定之前,需要关闭“XmlReader”对象。 – 2015-04-21 06:59:01