希望我能得到一些帮助,解决一个恼人的问题,我似乎找不到一个明确的答案。
我使用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));
        }
 }

07-24 22:28