-1

我有一段 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);

    }
4

1 回答 1

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

您可以从中获取 Handle.exe您可以从这里

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

于 2013-08-05T12:43:53.667 回答