希望我能得到一些帮助,解决一个恼人的问题,我似乎找不到一个明确的答案。
我使用xdocument对象将数据附加到xml文档,然后使用xdoc.save(path)覆盖现有文件,但由于某些原因,第一次运行代码时,即使文件未被任何其他进程使用,也会引发错误。
*“进程无法访问文件”C:\ xxx\xxxx\telemetry\2011_11_22.tlm,因为它正被另一个进程使用。”。*
后续迭代不会导致问题。
以下是我的代码,为了可读性,我正在使用删除try/catch的代码:
XElement x = GenerateTelemetryNode(h); //Create a new element to append
if (File.Exists(path))
{
if (xDoc == null)
{
xDoc = XDocument.Load(new StreamReader(path));
}
}
else
{
xDoc = new XDocument();
xDoc.Add(new XElement("TSD"));
}
xDoc.Element("TSD").Add(x);
xmlPath = path;
xDoc.Save(path);
我相信有一个很简单的解释。
非常感谢您的回复。
最佳答案
我认为问题在于streamreader没有被处理,在这种情况下,它仍然会附加到文档中。我建议在using
子句中包装streamreader创建,以确保在加载文档后立即处理它:
if (xDoc == null)
{
using (var sr = new StreamReader(path))
{
xDoc = XDocument.Load(new StreamReader(sr));
}
}