簡體   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