繁体   English   中英

使用C#写入和读取相同的xml文件(适用于Excel的RTD服务器)

[英]Write and Read the same xml file with C# (RTD server for excel)

我正在使用C#开发Excel的附加程序,其中包括RTD服务器。 因为我们还没有SQL数据库,所以我必须使用XML文件来存储数据。

一侧通过Excel中使用的C#函数更新XML文件。 另一方面,多个用户必须能够实时检索此数据。

当我同时运行两个函数(更新和读取XML文件)时,写入函数会不时崩溃,而错误file being usee by another process

写功能:

string _dataPath = Path.Combine(xllDir, "Test.xml");

        XmlDocument xmlDoc = new XmlDocument();

        xmlDoc.Load(_dataPath);

        XmlNode node = xmlDoc.SelectSingleNode(Data_Type.ToUpper() + "/" + Ticker.ToUpper() + "/" + Data.ToUpper() + "/VALUE");

        node.InnerXml = Convert.ToString(Value);

        XmlNode node_update = xmlDoc.SelectSingleNode(Data_Type.ToUpper() + "/" + Ticker.ToUpper() + "/" + Data.ToUpper() + "/LAST_UPDATE");
        node_update.InnerXml = Convert.ToString((DateTime.Now).TimeOfDay);

        xmlDoc.Save(_dataPath);

和读取功能:

 _xml.Load(topic.FileName);
        XmlNode node = _xml.SelectSingleNode("//" + topic.Ticker);
        topic.Value = node.InnerText;

我看不出如何解决这个问题,因此任何想法都将受到欢迎。

我刚刚找到一个简单的答案:

FileStream fs = new FileStream(FileName, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
         _xml.Load(fs);
         fs.Close();
         XmlNode node = _xml.SelectSingleNode("//" + Ticker);
         return node.InnerText;

这样,对于读取和写入功能,都不​​会崩溃。

据我所知,你无法做到。 定义一个映射您的xml文件的public class Ticker (例如, public class Ticker )。 在更新xml文件时实例化该类的对象:

node_update.InnerXml = Convert.ToString((DateTime.Now).TimeOfDay);
var ticker = new Ticker();
ticker.tickerValue = node_update.InnerText;

并通过该对象访问新数据:

topic.Value = this.ticker.tickerValue;  

注意:您可以为代码行类使用观察者模式,并在更新xml文件时对其进行更新。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM