从xml文件

时间:2016-10-04 17:12:15

标签: c#

我有一个文件观察程序应用程序,在某些情况下会遇到需要读取的文件的争用问题。我添加了一些代码来处理

的形式
System.Threading.Thread.Sleep(2000);

以下是我用来从文件中获取所需信息的代码

                using (System.Xml.XmlReader reader = System.Xml.XmlReader.Create(fullFilePath))
            {
                XDocument doc = XDocument.Load(reader);

                reader.Close();
                reader.Dispose(); 

                foreach (XElement el in doc.Root.Elements())
                {
                    foreach (XElement element in el.Elements())
                    {
                        if (element.Name == "var1")
                        {
                            aVal = element.Value.ToString();
                        }
                        if (element.Name == "var2")
                        {
                            bVal= element.Value.ToString();
                        }
                    }
                }
            }

我的问题是:有没有更快的方法来读取文件的内容,通过释放我的文件中的应用程序锁定?

我更新了要从文件中读取的代码,如下所示:

                lock(_lock)
            {
                using (XmlTextReader xmlTextReader = new XmlTextReader(fullFilePath))
                {
                    XDocument doc = XDocument.Load(xmlTextReader);

                    foreach (XElement el in doc.Root.Elements())
                    {
                        foreach (XElement element in el.Elements())
                        {
                            if (element.Name == "AccessionNumber")
                            {
                                accessionNumber = element.Value.ToString();
                            }
                            if (element.Name == "PatientID")
                            {
                                patientID = element.Value.ToString();
                            }
                        }
                    }
                }
            }

这在调试器中运行良好,但在通过构建的版本使用时不起作用。有什么想法吗?

1 个答案:

答案 0 :(得分:0)

最后通过从这篇文章实现文件锁定的重试机制解决了问题,这就是我问最初效率问题的原因。

FileStream and a FileSystemWatcher in C#, Weird Issue "process cannot access the file"

我的回答是由@Dag在上面的帖子中提供的。