保存XML文件时出错

时间:2013-08-05 12:32:40

标签: c# xml file-handling

我有一段C#代码,它将当前由Itunes播放的曲目信息保存到XML文件中。这段代码在一段时间内工作正常,但通常会在myXmlDocument.Save(ClsUtils.XmlPath)上提供错误“进程无法访问xml文件,因为它正被另一个进程c#使用”;

任何人都可以在这里建议可能出现的问题......

以下是代码

public void ModifyLastTrack(bool bOnlyPlayerPosition)
    {

        //initilize XML Document
        XmlDocument myXmlDocument = new XmlDocument();

        //load Xml into document
        myXmlDocument.Load(ClsUtils.XmlPath);

        //get Node for modify if Checked state Changed
        XmlNode DictLastTrackNode;
        DictLastTrackNode = myXmlDocument.DocumentElement;

        foreach (XmlNode ChildDictNode1 in DictLastTrackNode.ChildNodes)
        {
            foreach (XmlNode ChildDictNode2 in ChildDictNode1.ChildNodes)
            {

                if (!bOnlyPlayerPosition)
                {

                    if (ChildDictNode2.Name == "TrackID")
                        ChildDictNode2.InnerText = TrackID;
                                       }
                else
                {
                    if (ChildDictNode2.Name == "PlayerPosition")
                        ChildDictNode2.InnerText = PlayerPosition.ToString();
                }
            }

        }


        //save Xml after modification
        myXmlDocument.Save(ClsUtils.XmlPath);

    }

1 个答案:

答案 0 :(得分:0)

您可以通过以下代码终止导致此问题的进程,但我并不是说这是最好的主意:

 string fileName = @"D:\pathname.jpg";//Path to locked file

Process Handletool = new Process();
Handletool.StartInfo.FileName = "handle.exe";
Handletool.StartInfo.Arguments = fileName+" /accepteula";
Handletool.StartInfo.UseShellExecute = false;
Handletool.StartInfo.RedirectStandardOutput = true;
Handletool.Start();           
Handletool.WaitForExit();
string outputTool = Handletool.StandardOutput.ReadToEnd();

string matchPattern = @"(?<=\s+pid:\s+)\b(\d+)\b(?=\s+)";
foreach(Match match in Regex.Matches(outputTool, matchPattern))
{
    Process.GetProcessById(int.Parse(match.Value)).Kill();
}

您可以从here

获取Handle.exe

明白问题是有人打开了文件,可能是您或您编写的程序。确保每次打开流时关闭或使用using语句。 另一种方式,可能更好,将是在你占用文件的另一个进程的情况下为你想要保存的xml添加数字