【问题标题】:Write and Read the same xml file with C# (RTD server for excel)使用 C#(用于 Excel 的 RTD 服务器)写入和读取相同的 xml 文件
【发布时间】:2016-07-08 11:06:00
【问题描述】:

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

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

当我同时运行这两个函数(更新和读取 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;

我不知道如何解决这个问题,所以任何想法都会受到欢迎。

【问题讨论】:

    标签: c# xml rtd


    【解决方案1】:

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

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

    这样,对于读取和写入功能,根本没有任何崩溃。

    【讨论】:

      【解决方案2】:

      据我所知,你不能。定义一个映射您的 xml 文件的类(例如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 文件时对其进行更新。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2023-03-22
        • 2015-07-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多