0

RTD サーバーを含む C# で Excel のアドオンを開発しています。まだ 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;

これを整理する方法がわからないので、どんなアイデアでも大歓迎です。

4

2 に答える 2

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;

このように、読み取り関数と書き込み関数の両方で、何もクラッシュしません。

于 2010-11-05T11:20:37.310 に答える
0

私の知る限り、あなたはできません。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 ファイルを更新するたびにそれを更新できます。

于 2010-11-04T23:18:26.503 に答える