如何读取和写入任何旧的配置文件的旧字符串?

问题描述 投票:-3回答:1

c#,。net

这是我15年前首次出现时出现的问题。这听起来很容易,但我发现破解非常困难,主要是因为信息太少了。我最后破解了它,但现在是时候再次查看问题,我可以尝试重用我的15yo代码,或者我可以调查是否有更好的方法来做到这一点。如果可能的话,我选择了后者,但我仍然无法找到任何相关内容。

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

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

在那个文件中,我想去一个自定义部分yyyyy,即随机部分。

我希望能够读取和写入字符串值zzzzz。这个值最终是一个字符串是我能做出的唯一有效假设。

所以,忘记wwww.exe.config中表现良好的AppSettings部分 - 我正在寻找的东西比较棘手。

我只是看了我编写的代码来执行此操作 - 这是很多行 - 它从OpenMappedExeConfiguration开始,只是一步一步地研究出来。最终值作为object.ToString()返回。必须有一个更好的方法。我想知道是否有人使用他们认为简洁优雅的方法?

c# .net configuration-files
1个回答
0
投票

我部分解决了这个问题,但不得不假设我的设置位于文件的某个部分(appSettings)。我可以逃脱这一点,因为虽然设置是逻辑上的用户设置,但每个用户已经拥有自己的配置文件。

Microsoft配置文件是一个特殊结构的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属性的调用
  • 请记住,我们在这里处理键/值对。如果我们使用现有密钥,我们只需获取/设置元素[key] .Value,而如果我们正在编写新密钥,则必须创建一个新的(Microsoft)KeyValueConfigurationElement并将其添加到集合中。这个类有一个方便的构造函数,它只接受(字符串)键和(字符串)值。我的原始代码所做的其他事情之一是读取/写入任何可序列化的对象,远远超过我这次需要的。
  • 如果我正在写作,我最后需要记住保存配置。如果您正在编写,则会更新文件或创建一个干净的文件。

而已。我猜任何当前的读者都已经知道这一切,但我希望它对未来的读者有用。我发现整理它很有用,将这些碎片放在一起需要一段时间,所以它至少可以节省人们的时间。

顺便说一句,我无法分享原始代码的原因是因为我不拥有代码本身或版权。在我的司法管辖区,雇主/客户通常拥有员工/顾问编写的代码,至少在他们工作的时候,我也不例外。但我只有英国和美国的经验,所以其他司法管辖区可能会有所不同。并且,那些没有专业参与软件开发的人可能会完全遵守不同的规则。最后,多年来我发现许多软件开发人员完全不了解法律问题。

© www.soinside.com 2019 - 2024. All rights reserved.