2009-11-05 49 views
1

就在我開始之前,我會對我想要達到的目標進行一個小小的概述,然後我們會回到血淋淋的細節。目前我正在開發一個應用程序,該應用程序將監視用戶註冊表以更改與用戶首選項相關的特定鍵。目前正在使用強制配置文件(不是我的選擇),無論如何,整個想法是將更改記錄到可以在用戶下次登錄時將其寫回用戶註冊表的位置。XML到LINQ問題/ s

此刻,我有系統監視註冊表更改和觸發事件返回已更改的密鑰,值名稱和值。我將這些輸入到一個列表中,以創建一個包含所有數據的單個字符串,然後每隔一段時間將該列表寫入一個文本文件。現在這一切都很好,但我需要改變數據保存的方式,將字符串再次分解爲鍵值,名稱和值,以便回寫註冊表需要太多的開銷,並且還會出現將字符串分解爲唯一可識別的問題時尚。

所以有人建議我去看看XML,這是我以前沒有使用過,我已經開始研究它,這一切看起來很簡單,我也用LINQ之前連接到嵌入式數據庫。我目前努力爭取的頭腦是LINQ如何能夠從XML獲取和處理內存中的數據,因爲我不想經常訪問XML文件,因爲需要將應用程序保持爲快速儘可能。目前,註冊表中的所有更改都被緩存到List(String)中,然後每隔一分鐘左右寫入一個文本文件。

目前我所擁有的是系統在不同的字符串中返回鍵值,名稱和值,將它們收斂到單個List(String)值中,而我將需要的是表或等價表示一個鍵,其中包含多個值名稱,每個值名稱包含一個值,最後是一個類型(這將是一個數字,表示這是什麼類型的註冊表值,REG SZ,REG BINARY等)。 XML文件和程序都是自己的。

還什麼我不太得到的是不同的表,有模式將不存在的數據庫,直到程序第一次運行,因爲它會創建,而不是它已經存在一個新的XML文件。這是由於信息被寫回用戶個人驅動器,因此必須在第一次在用戶機器上運行時創建。

我試過幾個環節和教程等,但一切都沒有點擊,只是還沒有,所以如果你有一個例子或者也許可以解釋給我好一點我們將不勝感激。

我想補充的最後一點是,我目前的想法是將數據存儲在程序中,以創建值列表,嵌入值列表中並嵌入到鍵值列表中的值名稱列表。這聽起來不錯嗎?

現在我知道這是漫長的,那種所有的地方,因此,如果有人可以幫助我們將不勝感激,或者如果您需要澄清的更多信息,請讓我知道,我會盡我所能。

感謝

回答

1

從我的理解,你只是在錯誤的方向思考。您的應用程序不想在內存中操作XML。你只是想在內存中使用一些數據結構,並希望有一種簡單的方法將它存儲到光盤並將其讀回來?如果我理解正確的話:

不關心LINQ for XML。只需看看XML序列化基礎結構中的構建。然後構建一個適合您的應用程序需求的內部數據結構,並使用XmlSerializer將其寫入光盤並將其讀回。無需手動觸摸任何XML!

+0

基本上是這是正確的,我想操縱內存中的數據,然後有一個商店,將被寫入和讀取。 請參閱我習慣於SQL中的LINQ,我有一個現有的數據存儲並使用數據集等。 – manemawanna

+0

您應該忘記在內存中使用XML的想法。請參閱http://www.switchonthecode.com/tutorials/csharp-tutorial-xml-serialization以獲取有關XML序列化如何工作的示例。 – Achim

1

從你描述它是什麼似乎是一個好主意,在這裏使用XML。

至於在內存中存取XML DTA,我發現MSDN文檔非常有用:
http://msdn.microsoft.com/en-us/library/bb387098.aspx

的基本思路是,LINQ到XML只是LINQ到對象,工作對象是代表XML元素。

恐怕我不太明白你的第二個問題。

+0

你好,我需要知道的是關於XML,我已經閱讀了大部分的文檔,但我會再看看,如果我能在這一次更好地解決它的問題,現在我已經睡了一覺。 – manemawanna