[英]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.