如何读取任何旧字符串并将其写入任何旧配置文件?

时间:2019-02-18 17:32:57

标签: c# .net configuration-files

c#,.net

大约15年前,当.net 2.0首次出现时,我曾研究过这个问题。表面上听起来很容易,但是我发现很难破解,主要是因为信息很少。我最终破解了它,但是该重新考虑该问题了,我可以尝试重用我的15yo代码,也可以研究是否有更好的方法可以做到这一点。如果可能的话,我选择了后者,但仍然找不到任何相关内容。

我的exe文件是C:\ Program Files ...................... \ wwww.exe。

我想查看d:\ somewhere else \ xxxx.config,即一个随机位置。

在该文件中,我想转到自定义部分yyyyy,即随机部分。

,并且我希望能够读取和写入字符串值zzzzz。这个值最终是一个字符串,大约是我可以做的唯一有效假设。

因此,忘记wwww.exe.config中表现良好的AppSettings部分-我要寻找的东西要复杂得多。

我只是看了我编写的执行此操作的代码-很多行-它以OpenMappedExeConfiguration开头,并且一次只将内容磨碎一遍。最终值作为object.ToString()返回。必须有一个更好的方法。我想知道是否有人使用他们认为简洁而优雅的方法?

1 个答案:

答案 0 :(得分:0)

我部分解决了这个问题,但是必须假设我的设置位于文件的某个部分(appSettings)。我可以避免这样做,因为虽然设置在逻辑上是用户设置,但是每个用户已经拥有自己的配置文件。

Microsoft config文件是一种特殊结构的XML文件,Microsoft具有专用的程序集与System.Configuration一起使用,我真的希望有任何贡献者都知道这一点,当然,如果他们认为他们足够了解全力以赴。因此,就我而言,基于System.Xml以及更糟糕的是System.IO的建议只是获得了“ F”。我认为它们大多是滑稽的,而我却想知道为什么有人参与了一个信息共享站点,如果没有帮助的话。但是无论如何,我的解决方案依赖于System.Configuration。

为简便起见,使用伪代码:

  • 我可以使用ConfigurationManager.OpenMappedExeConfiguration打开任何旧文件。我猜这是众所周知的,并返回一个Configuration对象,该对象是文件的逻辑视图。有趣的是,即使磁盘上不存在该文件,该配置也不为空。
  • 假设我的设置位于文件的appSettings部分中,则可以仅使用生成的Configuration的AppSettings属性在相关部分中进行细化。我似乎记得我的旧代码支持任何部分,这使代码扩展了很多。同样,即使文件实际上不存在,Configuration.AppSettings也是有效的对象。
  • 拥有应用程序的“设置部分”属性后,我可以查看.Settings属性以查看其中的值。 appSettingsSection.Settings本质上是key.value对的字典,打扮成(Microsoft)KeyValueConfigurationCollection。如果文件不存在,则appSettings.Settings指向一个完全有效但为空的集合
  • 仅通过执行标准字典即可查看我的密钥是否已存在。包含对ElementCollection.AllKeys属性的调用
  • 请记住,我们在这里处理键/值对。如果使用现有键,则只需获取/设置element [key] .Value,而如果要编写新键,则必须创建一个新的(Microsoft)KeyValueConfigurationElement并将其添加到集合中。此类具有一个方便的构造函数,该构造函数仅接受(string)键和(string)值。我的原始代码所做的另一件事是读取/写入任何可序列化的对象,远远超出了我这次的需要。
  • 如果我在写作,我需要记住所有要保存的配置。如果您正在写文件,则文件将被更新或创建一个干净的文件。

就是这样。我想目前的任何读者都已经知道这一切,但是我希望它对将来的读者可能有用。我发现整理这些内容很有用,花了一些时间将它们放在一起,因此有望至少节省人们的时间。

顺便说一句,我之所以不能共享原始代码,是因为我既不拥有代码本身,也不拥有版权。在我的管辖范围内,雇主/客户至少在工作期间会拥有员工/顾问编写的代码,这很普遍,我也不例外。但是我只具有英国和美国的经验,因此其他辖区可能有所不同。而且,不专业从事软件开发的人员可能完全受制于不同的规则。最后,我发现多年来,许多软件开发人员完全不了解法律问题。