在我开始之前,我只想简要介绍一下我想要实现的目标,然后我们将深入了解血腥细节。目前我正在开发一个应用程序,它将监视用户注册表以查找与用户首选项相关的特定键的更改。目前使用强制配置文件(不是我的选择),无论如何,整个想法是将更改记录到下次登录时可以写回用户注册表的位置。
目前,我有系统监视注册表更改并触发事件,返回已更改的键,值名称和值。我将这些输入到列表中以创建包含所有数据的单个字符串,然后经常将该列表写入文本文件。现在这一切都很好,但我需要改变数据的方式,将字符串分解为键,值名称和值再次写回注册表需要太多的开销,并且还有问题在可识别的唯一标识中打破字符串方式。
因此有人建议我查看XML,我之前没有使用过,我已经开始研究它了,看起来很简单,我之前也使用过LINQ来连接嵌入式数据库。我目前正在努力解决的问题是LINQ如何能够从XML中检索和操作内存中的数据,因为我不希望不断地访问XML文件,因为需要保持应用程序快速尽可能。目前,注册表中的所有更改都会缓存到List(String)中,然后每隔一分钟写入一个文本文件。
目前,我所拥有的是系统在不同的字符串中返回键,值名称和值,将这些值汇总到一个List(String)值中,而我将需要的是表或等效表示key,包含多个值名称,每个值名称包含一个值,最后一个类型(这将是一个数字,表示这是什么类型的注册表值,REG SZ,REG BINARY等)。 XML文件和程序都是自己的。
另外我不太了解的是,与数据库不同的是,在程序首次运行之前,表和模式将不存在,因为它将创建一个新的XML文件,而不是它已经存在。这是由于信息被写回用户个人驱动器,因此必须在用户计算机上首次运行时创建。
我已经尝试了一些链接和教程等但是还没有点击过,所以如果你有一个例子或者可以向我解释一下它会更好一点,我们将不胜感激。
我想补充的最后一点是,我目前在程序中存储数据的想法是创建一个值列表,嵌入在值列表列表和嵌入在键列表中的值列表列表中。听起来不错吗?
现在我知道这很长,并且到处都是,所以如果有人可以提供帮助,我们将不胜感激,或者如果您需要进一步的澄清信息,请告诉我,我会尽我所能。
由于
答案 0 :(得分:1)
根据您的描述,在这里使用XML似乎是一个好主意。
至于访问内存中的XML dta,我发现MSDN文档非常有用:
http://msdn.microsoft.com/en-us/library/bb387098.aspx
基本思想是,LINQ-to-XML只是LINQ-to-Objects,它使用代表XML元素的对象。
我担心我不会得到你的第二个问题。
答案 1 :(得分:1)
据我所知,你只是想错了方向。您的应用程序不希望在内存中操作XML。您只想在内存中使用某些数据结构,并希望有一种简单的方法将其存储到光盘并将其读回?如果我明白这一点:
不关心LINQ for XML。只需看看XML序列化基础架构中的构建。然后构建一个适合您的应用程序需求的内部数据结构,并使用XmlSerializer将其写入光盘并将其读回。无需手动触摸任何XML!